ABSTRACT: Animal movements are often defined using the home range concept. Consequently, home ranges are determined by temporal, spatial, and individual-level processes. Within the environment, one of the key factors influencing an animal’s range and how it uses the environment is that of resources. Alterations to the environment that affect resource distribution and availability can have profound consequences on an animal’s spatial patterns. One of the best examples of this is that of golf courses. Some environmental modifications exhibited by some human altered environment can have positive effects on certain wildlife species by altering their movement patterns and foraging efforts. We analyzed data collected from 22 Gila Monsters Heloderma suspectum at a subsidized environment in Arizona from 2007 to 2013 and a non-subsidized environment. We performed both kernel density estimation and minimum convex polygons for comparability purposes. After adjusting for sex, number of fixes, and year, males in the subsidized environment had an average area of 15.9 ha while the females had an area of 5.9 ha. In the un-subsidized environment males had an average range of 38.8 ha while females had an area of 29.8 ha. This suggests that the home ranges may be smaller in subsidized environments than those of un-subsidized environments due to increases in available resources. There were also differences in home range overlap within and between sexes. In the subsidized population, there was very little male-male overlap with only two occurances, more female-female overlap and male-female overlap was increased. Male home ranges often overlapped several female home ranges. Gila Monsters may not have to invest in wide ranging foraging efforts as those populations of the un-subsidized environments.

Overview of the spatial ecology of Gila Monsters (Heloderma suspectum) at Stone Canyon Golf Club as a resource subsidized population vs. Owl Head Buttes representing the unsubsized natural population. For home range analyses and overlap, Minimum Convex Polygons (MCP) and Kernal Density Estimations (KDE) were used.

Compared home range sizes of Heloderma suspectum between two populations. One represented a subsidized population at Stone Canyon Golf Club and the other at Owl Head Buttes representing the unsubsidized population. Stone Canyon is located in Oro Valley on the north end of Tucson, Arizona. Owl Head Buttes is located about 17 km straight line distance north west from Stone Canyon. Data at Owl Head was collected from 2000 - 2002, while fixes were collected from 2007 - 2013 at Stone Canyon. We Calculated minimum convex polygons using both 95 percent and 100 percent of the locations for each lizard.

Summary of home range size.

Table 1. Pooled overall home ranges of Gila Monsters at Owl Head Buttes and Stone Canyon Golf Club. Both 100% and 95% MCPs were calculated between both populations.



Table: Table 1. Home range sizes of Stone Canyon and Owl head Buttes using both 95 percent and 100 percent MCPs.

Year   Gila   Sex      Environment      Home_Range_100mcp   N100   Home_Range_95mcp   N95
-----  -----  -------  --------------  ------------------  -----  -----------------  ----
2000   1      female   nonsubsidized                25.20     42              23.00    38
_      2      male     nonsubsidized                28.70    125              24.50   112
_      3      male     nonsubsidized                82.70     89              68.40    78
_      4      male     nonsubsidized                55.60     80              40.50    73
2001   1      female   nonsubsidized                20.10     26                 NA    NA
_      2      male     nonsubsidized                23.50     10                 NA    NA
_      3      male     nonsubsidized                60.10     18                 NA    NA
_      4      male     nonsubsidized                24.40     21                 NA    NA
_      10     male     nonsubsidized                28.50     14                 NA    NA
_      11     male     nonsubsidized                10.60     22                 NA    NA
_      12     male     nonsubsidized                23.60      7                 NA    NA
_      13     female   nonsubsidized                 8.90      9                 NA    NA
_      15     female   nonsubsidized                13.00     11                 NA    NA
_      50     female   nonsubsidized                21.00     11                 NA    NA
_      51     female   nonsubsidized                 7.10      8                 NA    NA
2002   2      male     nonsubsidized                66.20     38              40.00    37
_      4      male     nonsubsidized                73.10     76              55.50    73
_      10     male     nonsubsidized                39.50    111              33.30   105
_      11     male     nonsubsidized                39.30     92              31.90    88
_      12     male     nonsubsidized                49.50     66              41.50    63
_      13     female   nonsubsidized                26.30    101              23.70    96
_      15     female   nonsubsidized                39.20     98              21.30    94
_      17     female   nonsubsidized                47.60    106              29.10   101
_      50     female   nonsubsidized                15.80     68              14.10    66
_      51     female   nonsubsidized                18.50     57              12.40    57
2007   F104   female   subsidized                    3.37     18               3.37    19
_      F114   female   subsidized                    2.51      8               0.58     7
_      F36    female   subsidized                    5.05     20               3.49    19
_      F66    female   subsidized                   10.23     22               5.56    20
_      M112   male     subsidized                   12.51     13              12.51    12
_      M14    male     subsidized                    4.66     15               3.87    14
2008   F104   female   subsidized                    4.97     53               3.47    50
_      F114   female   subsidized                   11.96     52               9.38    49
_      F135   female   subsidized                    4.07     16               1.58    15
_      F137   female   subsidized                    5.98     15               5.75    14
_      F36    female   subsidized                    9.73     54               7.55    51
_      F66    female   subsidized                   11.29     51               9.95    48
_      M119   male     subsidized                   25.01     58              20.23    55
2009   F104   female   subsidized                    7.45     64               7.25    62
_      F114   female   subsidized                   11.46     52               8.28    49
_      F135   female   subsidized                    6.21     62               5.47    58
_      F137   female   subsidized                    6.09     35               5.68    33
_      F147   female   subsidized                   17.90     50              14.04    48
_      F36    female   subsidized                    7.48     62               5.83    60
_      F66    female   subsidized                   12.20     67              11.01    66
_      M112   female   subsidized                    7.89     71               1.73    70
_      M119   male     subsidized                   22.62     18              16.37    16
_      M69    male     subsidized                    1.91     69               1.91    69
_      F146   male     subsidized                   10.01     20               8.49    17
2010   F114   female   subsidized                    9.65     44               8.30    41
_      F137   female   subsidized                    6.32     45               5.26    42
_      F147   female   subsidized                   16.65     36              14.75    34
_      F200   female   subsidized                    5.36     34               5.23    33
_      F214   female   subsidized                    7.38     27               3.01    25
_      F36    female   subsidized                   38.81     50              12.16    47
_      F66    female   subsidized                   28.96     52              16.22    49
_      M112   male     subsidized                   20.46     26              14.41    24
_      M119   male     subsidized                   17.46     31               9.70    29
_      M69    male     subsidized                   13.85     30              10.75    28
2011   F114   female   subsidized                    5.91     22               3.30    20
_      F137   female   subsidized                    4.80     33               4.28    31
_      F147   female   subsidized                   19.44     24              12.90    22
_      F200   female   subsidized                    8.35     28               7.66    27
_      F214   female   subsidized                    6.61     22               5.66    21
_      F252   female   subsidized                    3.09     17               1.60    16
_      F36    female   subsidized                   11.93     23              10.95    21
_      F66    female   subsidized                    5.72      5               0.66     4
_      M14    male     subsidized                    4.48     13               3.84    12
_      M215   male     subsidized                   11.47     16              11.47    15
_      M255   male     subsidized                    5.85     16               5.59    15
2012   F114   female   subsidized                   10.17     54               7.15    51
_      F137   female   subsidized                    2.06     13               1.36    12
_      F147   female   subsidized                   17.64     52              16.75    49
_      F252   female   subsidized                    5.19     53               3.63    50
_      F36    female   subsidized                   10.34     52              10.30    49
_      M14    male     subsidized                    4.42     13               3.77    12
_      M215   male     subsidized                   11.04     21               9.85    20
_      M255   male     subsidized                    8.21     13               5.39    12
2013   F114   female   subsidized                    1.16      7               0.28     6
_      F147   female   subsidized                    0.31      6               0.00     5
_      F252   female   subsidized                      NA      4                 NA    NA
_      F36    female   subsidized                    0.13      6               0.00     5

Gila Monster Home Range Sizes at Stone Canyon vs. Owl Head Buttes.

Figure 1. Non-Subsidized (Owl Head Buttes) vs. Subsidized (Stone Canyon) population 100% MCPs by number of fixes across the whole study interval.

Raw Means of Overall Home Range by Sex.

Table 2. Group home range means of raw data of Stone Canyon and Owl Head Buttes. Grouped by environment and sex.



Table: Group Means of Overall Home Ranges at Stone Canyon and Owl Head Buttes

Environment     Sex        N   Home_Range_100mcp          sd         se          ci
--------------  -------  ---  ------------------  ----------  ---------  ----------
nonsubsidized   female    11           22.063636   12.287414   3.704795    8.254797
nonsubsidized   male      14           43.235714   21.672372   5.792185   12.513255
subsidized      female    37            9.836757    6.984007   1.148164    2.328584
subsidized      male      16           11.707500    6.907877   1.726969    3.680948

Figure 2. Raw overall mean home ranges between environment and sex.

Repeated measures ANOVA for Yearly Home Ranges by Sex.

Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Home_Range_100mcp ~ Environment + Year + Sex + N100 + (1 | Gila)
   Data: year

REML criterion at convergence: 577.8

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.5420 -0.4986 -0.0440  0.3136  3.3059 

Random effects:
 Groups   Name        Variance Std.Dev.
 Gila     (Intercept) 44.15    6.645   
 Residual             82.76    9.097   
Number of obs: 78, groups:  Gila, 30

Fixed effects:
                        Estimate Std. Error         df t value Pr(>|t|)    
(Intercept)           -1320.5569  1743.0462    67.1206  -0.758  0.45133    
Environmentsubsidized   -23.5664     8.1679    72.9985  -2.885  0.00514 ** 
Year                      0.6688     0.8710    67.1222   0.768  0.44527    
Sexmale                  10.0308     3.1991    32.6172   3.136  0.00362 ** 
N100                      0.1958     0.0418    55.1173   4.685 1.88e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) Envrnm Year   Sexmal
Envrnmntsbs  0.902                     
Year        -1.000 -0.903              
Sexmale     -0.040  0.036  0.039       
N100         0.064  0.163 -0.065  0.051

Directional means of home range using the least square means based on sex between Stone Canyon and Owl Head Buttes.

Figure 3. Adjusted means of home ranges between environment and sex. Adjusted for sample size, year and sex.

Post-Hoc comparisons between sexes:

Sex = female:
 contrast                   estimate   SE df t.ratio p.value
 nonsubsidized - subsidized     23.6 8.31 73 2.836   0.0059 

Sex = male:
 contrast                   estimate   SE df t.ratio p.value
 nonsubsidized - subsidized     23.6 8.31 73 2.836   0.0059 

Graphical Comparisons of Sex between the two populatins:

Table 3. Direction means of home range after being adjusted for year, sex and sample size.



Table: Adjusted Means of Male vs. Female home ranges at Stone Canyon and Owl Head Buttes.

Sex      Environment         lsmean         SE         df     lower.CL   upper.CL
-------  --------------  ----------  ---------  ---------  -----------  ---------
female   nonsubsidized    29.612721   5.987412   72.46937   17.6783538   41.54709
male     nonsubsidized    39.643485   6.029813   71.14839   27.6208143   51.66616
female   subsidized        6.046318   3.444012   52.60294   -0.8627133   12.95535
male     subsidized       16.077082   3.774266   57.13328    8.5196265   23.63454

Seasonal Home Range.

Home range analysis broken down by five seasons; Emergence, Dry, Monsoon, Post Monsoon. The start of emergence was defined by when movement patterns increased from none/minimal to the start of high activity. Effort was taken to match as closely as possible to the Owl Head Buttes emergence date interval. Monsoon season was adjusted using NOAA climate data. The start of was defined when the mean dew point temperatures of three consecutive days were greater than 55 degrees.

Scaling home range analyses by seasonal estimates reduces the number or locations for each lizard. 100 percent MCPs were used for seasonal home range analyses to avoid any further reduction of locations for each estimation.
Table 4. Raw group means of home ranges grouped by environment season.



Table: Raw Group Means of Seasonal Home Ranges at Stone Canyon

Environment     Season           N   Home_Range_100mcp          sd          se         ci
--------------  -------------  ---  ------------------  ----------  ----------  ---------
nonsubsidized   Dry             12          23.7166667   12.841682   3.7070742   8.159215
nonsubsidized   Emergence       10           2.8100000    3.121414   0.9870776   2.232925
nonsubsidized   Monsoon         13          23.6538462    9.446482   2.6199828   5.708452
nonsubsidized   Post_Monsoon    11           0.6909091    1.013365   0.3055411   0.680788
subsidized      Dry             17          13.0364706   10.574940   2.5647997   5.437133
subsidized      Emergence        9           2.0977778    1.649566   0.5498555   1.267969
subsidized      Monsoon         18          10.5600000    7.518662   1.7721657   3.738943
subsidized      Post_Monsoon    14           2.9885714    5.044404   1.3481737   2.912552

Figure 4. Raw seasonal home range means grouped by environment and sex. Both the non-subsidized and subsidized populations follow similar patterns, but with the subsidized means less than those of the non-subsidized population.

Repeated measures ANOVA for Seasons.

Table 5. Adjusted seasonal means of home range between the non-subsidized and subsidized populations. The emergence and post-monsoon season between the two populations show similar home range sizes. Differences in home range sizes between the two populations is during the dry and monsoon seasons.



Table: Adjusted Seasonal Means of Home Ranges at Stone Canyon and Owl Head Buttes.

Season         Environment      N.Individuals   lsmean     SE   df   lower.CL   upper.CL
-------------  --------------  --------------  -------  -----  ---  ---------  ---------
Emergence      nonsubsidized                9     2.81   2.52   96      -2.19       7.81
Dry            nonsubsidized               12    23.72   2.30   96      19.15      28.28
Monsoon        nonsubsidized               13    23.65   2.21   96      19.27      28.04
Post_Monsoon   nonsubsidized               11     0.69   2.40   96      -4.07       5.46
Emergence      subsidized                   9     2.10   2.65   96      -3.17       7.37
Dry            subsidized                  17    13.04   1.93   96       9.20      16.87
Monsoon        subsidized                  18    10.56   1.88   96       6.83      14.29
Post_Monsoon   subsidized                  14     2.99   2.13   96      -1.24       7.21
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Home_Range_100mcp ~ Environment + Season + Sex + N + (1 | Gila)
   Data: seasonal

REML criterion at convergence: 670.6

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.6904 -0.7191 -0.2474  0.4440  2.9426 

Random effects:
 Groups   Name        Variance Std.Dev.
 Gila     (Intercept)  3.386   1.840   
 Residual             54.719   7.397   
Number of obs: 100, groups:  Gila, 30

Fixed effects:
                       Estimate Std. Error        df t value Pr(>|t|)    
(Intercept)            14.97953    2.65399  62.37621   5.644 4.34e-07 ***
Environmentsubsidized  -4.83481    1.69122  23.36346  -2.859   0.0088 ** 
SeasonEmergence       -12.28159    2.42349  85.56625  -5.068 2.29e-06 ***
SeasonMonsoon          -0.60215    1.96764  66.24482  -0.306   0.7605    
SeasonPost_Monsoon    -11.74341    2.36522  86.89224  -4.965 3.40e-06 ***
Sexmale                 1.69188    1.77127  26.24662   0.955   0.3482    
N                       0.07933    0.04154  77.63737   1.910   0.0599 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) Envrnm SsnEmr SsnMns SsnP_M Sexmal
Envrnmntsbs -0.443                                   
SeasnEmrgnc -0.605  0.089                            
SeasonMonsn -0.365  0.019  0.413                     
SsnPst_Mnsn -0.654  0.031  0.537  0.417              
Sexmale     -0.520  0.175  0.125 -0.027  0.170       
N           -0.655 -0.007  0.380 -0.044  0.472  0.306

Figure 5. Adjusted seasonal home ranges between the two populations after being adjusted for season, sex and sample size by RMANOVA.

Table 6. Mean individual seasoanl home ranges pooled from the entire study period. Missing values are depicted where no locations for that animal during that period were successfull.



Table: Seasonal Individual Home Ranges.

X        Emergence   X.1         X.2     Dry     X.3     Monsoon   X.4      Post.Monsoon   X.5   
-------  ----------  ----------  ------  ------  ------  --------  -------  -------------  ------
Lizard   Sex         Area (ha)   N       Area    N       Area      N        Area           N     
M69      Male        0.33        4.00    36.73   24.00   14.84     22.00    0.07           8.00  
M67      Male        NA          NA      5.71    9.00    7.72      7.00     NA             NA    
M255     Male        3.23        7.00    NA      NA      1.07      9.00     NA             NA    
M215     Male        2.64        7.00    8.28    11.00   7.22      12.00    NA             NA    
M14      Male        NA          NA      6.20    15.00   7.50      10.00    NA             NA    
M119     Male        NA          NA      27.84   17.00   19.98     67.00    1.55           9.00  
M112     Male        NA          NA      24.93   16.00   14.14     29.00    0.28           8.00  
F66      Female      0.33        5.00    9.60    97.00   33.65     79.00    1.36           16.00 
F36      Female      2.94        12.00   24.99   99.00   10.30     118.00   19.14          27.00 
F252     Female      1.27        8.00    2.54    14.00   6.48      30.00    0.39           9.00  
F214     Female      NA          NA      5.04    10.00   7.79      28.00    1.87           9.00  
F200     Female      NA          NA      4.71    8.00    4.23      40.00    2.05           12.00 
F147     Female      5.44        14.00   25.52   57.00   18.21     70.00    7.14           18.00 
F146     Female      NA          NA      9.55    22.00   5.97      17.00    0.03           7.00  
F137     Female      1.71        6.00    6.54    43.00   6.95      62.00    2.19           17.00 
F135     Female      NA          N       3.71    25.00   5.72      48.00    0.68           5.00  
F114     Female      0.99        12.00   13.66   99.00   10.72     84.00    4.56           24.00 
F104     Female      NA          NA      6.07    70.00   7.59      49.00    0.53           13.00 
                                                                                                 
Means    Overall     1.89                13.04           10.56              2.99                 
         Male        2.07                18.28           10.35              0.63                 
         Female      2.11                10.18           10.69              3.63                 

Gila Monster Home Range Overlap of 100% MCPs.

Figure 4. Home Range overlap by sex of 100% MCPs at Stone Canyon. Red polygons represent female lizards, and blue represents male lizards.

The Stone Canyon population seems to exhibit greater female-female overlap as well as considerable overlap of male-female home ranges. There appears to be limited male-male overlap, with occurance happening in only two male-male home range polygons. This finding is in contrast to the Owl Head buttes study which revealed that there was a large degree of overlap among male-female and male-male overlaps (Table 4). Gillardo concluded that, in their study, the high degree of overlap in males-males interactions may be due to having larger home ranges for mate searching activities. Males may have and increased home range size to maximize their access to multiple females. She concluded that the lack of female-female overlap may be due to smaller home range sizes.

At Stone Canyon, males have reduced home range sizes (Table 2; Fig. 2). However, males still retain home range overlap with multiple females while having reduced contact with other males. This may be in response to nutrient subsidies that reduce the need to have expanded home range sizes for foraging activities for both males and females. There may also be a higher density of females as a response to resource availability and reduced range requirements. Males are not forced to expand home ranges for mate searching to the extant that individuals at Owl Head Buttes may be subject to.

Table 4. Home range overlap of Gila Monsters at the nutrient subsidized site. Male-male overlaps only occured between two pairs of males: M14-M69 and M119-M215 at 0.5 ha. and 19.5 ha. respectively and were therefore not included in the table.



Table: Home range overlap of Stone Canyon Gila Monsters using 100% MCPs.

ID              F36          F66    F104   F135   F137   F146   F147   X             M14           M67    M69    M112    M119    M215    M255 
--------------  -----------  -----  -----  -----  -----  -----  -----  ------------  ------------  -----  -----  ------  ------  ------  -----
Female:Female                                                          Male:Female                                                            
F36             _            5.13   _      _      _      4.65   _                    _             _      _      _       19.44   18.51   _    
F66             5.13         _      _      _      _      5.05   _                    _             _      2.6    _       _       _       _    
F104            _            _      _      0.5           _      _                    _             _      _      _       _       _       _    
F114            _            _      _      _      _      _      _                    _             _      _      5.82    _       _       _    
F135            _            _      0.5    _      2.89   _      3.94                 _             _      2.04   _       _       _       _    
F137            _            _      _      2.89   _      _      7.91                 _             _      0.55   _       _       _       _    
F146            4.65         5.05   _      _      _      _      _                    0.14          _      0.76   _       _       _       _    
F147            _            _      _      3.94   7.91   _      _                    3.73          0.21   4.6    _       _       _       _    
F200            _            _      _      _      _      _      _                    _             _      _      6.49    _       _       _    
F252            _            _      _      _      _      _      _                    _             _      _      _       _       _       3.45 
                                                                                                                                              
Mean =          4.3 ± 0.86                                             Mean =        5.26 ± 1.78                                              
                                                                                                                                              
                                                                                                                                              
ID              F36          F66    F104   F135   F137   F146   F147                 M14           M67    M69    M112    M119    M215    M255 
Female:Female                                                          Male:Female                                                            
Net             6.84         7.25   0.5    4.44   7.91   6.77   8.96                 3.87          0.21   8.57   12.31   21.24   20.32   3.45 
Prportion       0.2          0.2    0.1    0.5    1      0.7    0.3                  0.4           0.02   0.5    0.4     0.6     1       0.2  

Gila Monster Home Range Shifts of 100% MCPs.

Gila Monster Proportion of Refuge Use.

Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AVG_PROP_YR_LIZ ~ COVERTYPE + SEASON + SEX + YEAR + COVERTYPE *  
    SEASON + (1 | LIZARDNUMBER)
   Data: Refugia

REML criterion at convergence: -153

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.7127 -0.6226 -0.1802  0.5562  3.5758 

Random effects:
 Groups       Name        Variance  Std.Dev.
 LIZARDNUMBER (Intercept) 0.0002518 0.01587 
 Residual                 0.0154691 0.12437 
Number of obs: 158, groups:  LIZARDNUMBER, 21

Fixed effects:
                                     Estimate Std. Error         df t value Pr(>|t|)    
(Intercept)                         -7.700460  14.076150  32.071409  -0.547 0.588126    
COVERTYPEMidden                     -0.020036   0.051328 133.473533  -0.390 0.696892    
COVERTYPERocks                      -0.063939   0.042135 126.493669  -1.517 0.131640    
SEASONEmergence                     -0.133105   0.047284 139.729056  -2.815 0.005583 ** 
SEASONMonsoon                       -0.043444   0.042209 129.438281  -1.029 0.305277    
SEASONPost-Monsoon                  -0.060754   0.042217 128.072266  -1.439 0.152566    
SEXMale                              0.055117   0.022639  13.273789   2.435 0.029725 *  
YEAR                                 0.003946   0.007008  32.081783   0.563 0.577293    
COVERTYPERocks:SEASONEmergence       0.239451   0.068673 130.604344   3.487 0.000666 ***
COVERTYPEMidden:SEASONMonsoon        0.042844   0.067202 127.927256   0.638 0.524914    
COVERTYPERocks:SEASONMonsoon         0.066350   0.059018 126.524094   1.124 0.263041    
COVERTYPEMidden:SEASONPost-Monsoon  -0.075480   0.082151 132.158201  -0.919 0.359879    
COVERTYPERocks:SEASONPost-Monsoon    0.033366   0.059934 124.298904   0.557 0.578723    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
fit warnings:
fixed-effect model matrix is rank deficient so dropping 1 column / coefficient
Type III Analysis of Variance Table with Satterthwaite's method
                   Sum Sq  Mean Sq NumDF   DenDF F value  Pr(>F)  
COVERTYPE        0.017928 0.008964     2 132.711  0.5795 0.56160  
SEASON           0.105661 0.035220     3 138.017  2.2768 0.08243 .
SEX              0.091693 0.091693     1  13.274  5.9275 0.02972 *
YEAR             0.004905 0.004905     1  32.082  0.3171 0.57729  
COVERTYPE:SEASON 0.238481 0.047696     5 128.651  3.0833 0.01159 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

There was no effect of year on refuge use. Performed Mixed Effects RMANOVA for each refuge type, then conducted pairwise comparisons for each refuge type across seasons. For post-hoc pariwise comparisons, used Bonferonni adjusted p-value.

Run RMANOVA for each refuge type and pairwise comparisons across each season:

Rocks

Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: SEAS_PROP_LIZ ~ SEASON + SEX + SEASON * SEX + (1 | LIZARDNUMBER)
   Data: Rocks

REML criterion at convergence: -103.8

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.55487 -0.58207 -0.05309  0.52233  2.05627 

Random effects:
 Groups       Name        Variance Std.Dev.
 LIZARDNUMBER (Intercept) 0.003287 0.05733 
 Residual                 0.004596 0.06780 
Number of obs: 63, groups:  LIZARDNUMBER, 20

Fixed effects:
                             Estimate Std. Error         df t value Pr(>|t|)    
(Intercept)                 0.1316008  0.0274521 42.7537594   4.794    2e-05 ***
SEASONEmergence            -0.1036536  0.0346126 37.5673742  -2.995  0.00484 ** 
SEASONMonsoon               0.0300659  0.0293719 35.7211388   1.024  0.31289    
SEASONPost-Monsoon         -0.0669273  0.0302162 36.5544335  -2.215  0.03308 *  
SEXMale                     0.0236997  0.0430740 41.4518910   0.550  0.58513    
SEASONEmergence:SEXMale     0.1220126  0.0673303 38.7530731   1.812  0.07772 .  
SEASONMonsoon:SEXMale      -0.0003664  0.0461313 36.2245830  -0.008  0.99371    
SEASONPost-Monsoon:SEXMale  0.0433949  0.0486611 36.0738584   0.892  0.37842    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) SEASONEm SEASONMn SEASONPs-M SEXMal SEASONE: SEASONM:
SEASONEmrgn -0.502                                                      
SEASONMonsn -0.595  0.469                                               
SEASONPst-M -0.581  0.468    0.543                                      
SEXMale     -0.637  0.320    0.379    0.371                             
SEASONE:SEX  0.258 -0.514   -0.241   -0.241     -0.391                  
SEASONM:SEX  0.379 -0.299   -0.637   -0.346     -0.589  0.365           
SEASONP-M:S  0.361 -0.291   -0.337   -0.621     -0.543  0.360    0.507  
Type III Analysis of Variance Table with Satterthwaite's method
             Sum Sq  Mean Sq NumDF  DenDF F value  Pr(>F)  
SEASON     0.054242 0.018081     3 37.289  3.9337 0.01556 *
SEX        0.017170 0.017170     1 18.228  3.7355 0.06896 .
SEASON:SEX 0.019296 0.006432     3 37.289  1.3994 0.25820  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

    Pairwise comparisons using t tests with pooled SD 

data:  AVG_PROP_YR_LIZ and SEASON 

             Dry  Emergence Monsoon
Emergence    0.51 -         -      
Monsoon      1.00 0.99      -      
Post-Monsoon 1.00 0.17      1.00   

P value adjustment method: bonferroni 

Burrow

Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: SEAS_PROP_LIZ ~ SEASON + SEX + SEASON * SEX + (1 | LIZARDNUMBER)
   Data: Burrow

REML criterion at convergence: -119

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.9838 -0.5150 -0.1694  0.4066  4.6576 

Random effects:
 Groups       Name        Variance Std.Dev.
 LIZARDNUMBER (Intercept) 0.000000 0.00000 
 Residual                 0.005444 0.07378 
Number of obs: 65, groups:  LIZARDNUMBER, 21

Fixed effects:
                           Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)                 0.14400    0.02333 57.00000   6.172 7.51e-08 ***
SEASONEmergence            -0.11150    0.03500 57.00000  -3.186  0.00234 ** 
SEASONMonsoon               0.04236    0.03224 57.00000   1.314  0.19406    
SEASONPost-Monsoon         -0.02855    0.03224 57.00000  -0.885  0.37961    
SEXMale                     0.03100    0.03500 57.00000   0.886  0.37945    
SEASONEmergence:SEXMale    -0.00550    0.05472 57.00000  -0.101  0.92029    
SEASONMonsoon:SEXMale      -0.07570    0.05125 57.00000  -1.477  0.14520    
SEASONPost-Monsoon:SEXMale -0.06646    0.05125 57.00000  -1.297  0.20000    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) SEASONEm SEASONMn SEASONPs-M SEXMal SEASONE: SEASONM:
SEASONEmrgn -0.667                                                      
SEASONMonsn -0.724  0.482                                               
SEASONPst-M -0.724  0.482    0.524                                      
SEXMale     -0.667  0.444    0.482    0.482                             
SEASONE:SEX  0.426 -0.640   -0.309   -0.309     -0.640                  
SEASONM:SEX  0.455 -0.303   -0.629   -0.329     -0.683  0.437           
SEASONP-M:S  0.455 -0.303   -0.329   -0.629     -0.683  0.437    0.466  
convergence code: 0
boundary (singular) fit: see ?isSingular

Type III Analysis of Variance Table with Satterthwaite's method
             Sum Sq  Mean Sq NumDF DenDF F value    Pr(>F)    
SEASON     0.134062 0.044687     3    57  8.2093 0.0001249 ***
SEX        0.000525 0.000525     1    57  0.0965 0.7572312    
SEASON:SEX 0.018319 0.006106     3    57  1.1217 0.3479249    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

    Pairwise comparisons using t tests with pooled SD 

data:  AVG_PROP_YR_LIZ and SEASON 

             Dry   Emergence Monsoon
Emergence    0.038 -         -      
Monsoon      1.000 0.493     -      
Post-Monsoon 0.809 0.999     1.000  

P value adjustment method: bonferroni 

Midden

Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: SEAS_PROP_LIZ ~ SEASON + SEX + SEASON * SEX + (1 | LIZARDNUMBER)
   Data: Midden

REML criterion at convergence: -33.5

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.6646 -0.6384 -0.1226  0.4586  1.9445 

Random effects:
 Groups       Name        Variance  Std.Dev.
 LIZARDNUMBER (Intercept) 0.0001205 0.01098 
 Residual                 0.0107199 0.10354 
Number of obs: 30, groups:  LIZARDNUMBER, 17

Fixed effects:
                      Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)            0.19641    0.04250 24.99991   4.621 9.95e-05 ***
SEASONMonsoon         -0.01060    0.05467 15.75945  -0.194   0.8487    
SEASONPost-Monsoon    -0.16835    0.06285 17.87443  -2.678   0.0154 *  
SEXMale               -0.12614    0.07362 24.99990  -1.713   0.0990 .  
SEASONMonsoon:SEXMale  0.14462    0.09009 16.50796   1.605   0.1274    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) SEASONMn SEASONP SEXMal
SEASONMonsn -0.773                        
SEASONPst-M -0.672  0.523                 
SEXMale     -0.577  0.446    0.388        
SEASONM:SEX  0.469 -0.607   -0.317  -0.813
fit warnings:
fixed-effect model matrix is rank deficient so dropping 1 column / coefficient
Type III Analysis of Variance Table with Satterthwaite's method
             Sum Sq  Mean Sq NumDF  DenDF F value Pr(>F)  
SEASON     0.124380 0.062190     2 16.453  5.8014 0.0124 *
SEX        0.015098 0.015098     1 16.585  1.4084 0.2520  
SEASON:SEX 0.027624 0.027624     1 16.508  2.5769 0.1274  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

    Pairwise comparisons using t tests with pooled SD 

data:  AVG_PROP_YR_LIZ and SEASON 

             Dry   Monsoon
Monsoon      1.000 -      
Post-Monsoon 0.051 0.018  

P value adjustment method: bonferroni 

Analyses suggests that there is an effect of season across all three refuge types, but there is no interaction of sex and season on chosen refuge types (Tables 5-7). After performing post-hoc pairwise comparisons, the proportion of refuge use for rocks was higher in emergence (0.37). This may be due to Gila Monsters prefering more rocky refugia for hibernacula use. However, lizards used rocky refugia in smaller proportions throught the dry, monsoon and post-monsoon seasons(Table 5). During the dry season Gila Monsters exhibited a higher proportion of refuge use in burrows (0.26), but mainted about the same of burrow use throug the monsoon season (Table 6.). Gila Monsters chose midden refuge types in dry and monsoon seasons (0.21 and 0.23 respectively), with the majority midden selection in the monsoon. However, both the burrow and midden refuge types were both used throughtout the dry and monsoon seasons.
Table 5. Mean proportinal use of refuge types across easch season by sex.



Table: Refuge Use Proportional Means by Sex and Season

Refuge.Type   X         Emergence    Dry   Monsoon   Post_Monsoon
------------  -------  ----------  -----  --------  -------------
Rock                           NA     NA        NA             NA
              Male           0.50   0.20      0.25           0.27
              Female         0.23   0.18      0.19           0.11
              Mean           0.37   0.19      0.22           0.19
                               NA     NA        NA             NA
Burrow                         NA     NA        NA             NA
              Male           0.19   0.28      0.16           0.23
              Female         0.08   0.23      0.23           0.16
              Mean           0.14   0.26      0.20           0.20
                               NA     NA        NA             NA
Midden                         NA     NA        NA             NA
              Male           0.00   0.17      0.25           0.00
              Female         0.00   0.24      0.21           0.07
              Mean           0.00   0.21      0.23           0.04
                                                                                                                                                                                          Table 6. Post-Hoc pairwise comparisons of refuge types between seasons.


Table: Post Hoc Pairwise Comparisons of Refuge Types

Refuge.Type   Seasonal.Comparisons     P.Value 
------------  -----------------------  --------
Rock                                           
              Emergence:Dry            0.68    
              Emergence:Monsoon        0.12    
              Emergence:Post Monsoon   0.99    
              Dry:Monsoon              0.36    
              Dry:Post Monsoon         0.35    
              Monsoon:Post Monsoon     0.009*  
                                               
Burrow                                         
              Emergence:Dry            0.001*  
              Emergence:Monsoon        0.0006* 
              Emergence:Post Monsoon   0.23    
              Dry:Monsoon              0.99    
              Dry:Post Monsoon         0.12    
              Monsoon:Post Monsoon     0.07    
                                               
Midden                                         
              Emergence:Dry            NA      
              Emergence:Monsoon        NA      
              Emergence:Post Monsoon   NA      
              Dry:Monsoon              0.39    
              Dry:Post Monsoon         NA      
              Monsoon:Post Monsoon     NA      
                                                                                                                                                                                          Table 7. ANOVA table after conducting Mixed Effects RMANOVA for each refuge type across seasons.


Table: ANOVA Table of RM Analysis for Refuge Use

X        Effect        DF      F  Pr..F.  
-------  -----------  ---  -----  --------
Rock                   NA     NA          
         Season         3   4.24  0.01*   
         Sex            1   3.04  0.09    
         Sex:Season     3   1.54  0.22    
                       NA     NA          
Burrow                 NA     NA          
         Season         3   8.04  0.0001* 
         Sex            1   0.16  0.68    
         Sex:Season     3   0.97  0.41    
                       NA     NA          
Midden                 NA     NA          
         Season         2   5.81  0.01*   
         Sex            1   1.41  0.25    
         Sex:Season     1   2.58  0.12    
LS0tCnRpdGxlOiAiU3BhdGlhbCBFY29sb2d5IEdpbGEgTW9uc3RlcnMgaW4gYSBSZXNvdXJjZSBTdWJzaWRpemVkIEVudmlyb25tZW50IgphdXRob3I6ICJNLiBQaWVyc29uIgpkYXRlOiAiMjggQXVndXN0IDIwMTkiCm91dHB1dDoKICBodG1sX25vdGVib29rOiBkZWZhdWx0CiAgcGRmX2RvY3VtZW50OiBkZWZhdWx0CiAgZmlnX2NhcHRpb246IHllcwogIG51bWJlcl9zZWN0aW9uczogeWVzCi0tLQoKQUJTVFJBQ1Q6CkFuaW1hbCBtb3ZlbWVudHMgYXJlIG9mdGVuIGRlZmluZWQgdXNpbmcgdGhlIGhvbWUgcmFuZ2UgY29uY2VwdC4gQ29uc2VxdWVudGx5LCBob21lIHJhbmdlcyBhcmUgZGV0ZXJtaW5lZCBieSB0ZW1wb3JhbCwgc3BhdGlhbCwgYW5kIGluZGl2aWR1YWwtbGV2ZWwgcHJvY2Vzc2VzLiBXaXRoaW4gdGhlIGVudmlyb25tZW50LCBvbmUgb2YgdGhlIGtleSBmYWN0b3JzIGluZmx1ZW5jaW5nIGFuIGFuaW1hbOKAmXMgcmFuZ2UgYW5kIGhvdyBpdCB1c2VzIHRoZSBlbnZpcm9ubWVudCBpcyB0aGF0IG9mIHJlc291cmNlcy4gIEFsdGVyYXRpb25zIHRvIHRoZSBlbnZpcm9ubWVudCB0aGF0IGFmZmVjdCByZXNvdXJjZSBkaXN0cmlidXRpb24gYW5kIGF2YWlsYWJpbGl0eSBjYW4gaGF2ZSBwcm9mb3VuZCBjb25zZXF1ZW5jZXMgb24gYW4gYW5pbWFs4oCZcyBzcGF0aWFsIHBhdHRlcm5zLiBPbmUgb2YgdGhlIGJlc3QgZXhhbXBsZXMgb2YgdGhpcyBpcyB0aGF0IG9mIGdvbGYgY291cnNlcy4gIFNvbWUgZW52aXJvbm1lbnRhbCBtb2RpZmljYXRpb25zIGV4aGliaXRlZCBieSBzb21lIGh1bWFuIGFsdGVyZWQgZW52aXJvbm1lbnQgY2FuIGhhdmUgcG9zaXRpdmUgZWZmZWN0cyBvbiBjZXJ0YWluIHdpbGRsaWZlIHNwZWNpZXMgYnkgYWx0ZXJpbmcgdGhlaXIgbW92ZW1lbnQgcGF0dGVybnMgYW5kIGZvcmFnaW5nIGVmZm9ydHMuICBXZSBhbmFseXplZCBkYXRhIGNvbGxlY3RlZCBmcm9tIDIyIEdpbGEgTW9uc3RlcnMgSGVsb2Rlcm1hIHN1c3BlY3R1bSBhdCBhIHN1YnNpZGl6ZWQgZW52aXJvbm1lbnQgaW4gQXJpem9uYSBmcm9tIDIwMDcgdG8gMjAxMyBhbmQgYSBub24tc3Vic2lkaXplZCBlbnZpcm9ubWVudC4gIFdlIHBlcmZvcm1lZCBib3RoIGtlcm5lbCBkZW5zaXR5IGVzdGltYXRpb24gYW5kIG1pbmltdW0gY29udmV4IHBvbHlnb25zIGZvciBjb21wYXJhYmlsaXR5IHB1cnBvc2VzLiAgQWZ0ZXIgYWRqdXN0aW5nIGZvciBzZXgsIG51bWJlciBvZiBmaXhlcywgYW5kIHllYXIsIG1hbGVzIGluIHRoZSBzdWJzaWRpemVkIGVudmlyb25tZW50IGhhZCBhbiBhdmVyYWdlIGFyZWEgb2YgMTUuOSBoYSB3aGlsZSB0aGUgZmVtYWxlcyBoYWQgYW4gYXJlYSBvZiA1LjkgaGEuICBJbiB0aGUgdW4tc3Vic2lkaXplZCBlbnZpcm9ubWVudCBtYWxlcyBoYWQgYW4gYXZlcmFnZSByYW5nZSBvZiAzOC44IGhhIHdoaWxlIGZlbWFsZXMgaGFkIGFuIGFyZWEgb2YgMjkuOCBoYS4gIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgaG9tZSByYW5nZXMgbWF5IGJlIHNtYWxsZXIgaW4gc3Vic2lkaXplZCBlbnZpcm9ubWVudHMgdGhhbiB0aG9zZSBvZiB1bi1zdWJzaWRpemVkIGVudmlyb25tZW50cyBkdWUgdG8gaW5jcmVhc2VzIGluIGF2YWlsYWJsZSByZXNvdXJjZXMuIFRoZXJlIHdlcmUgYWxzbyBkaWZmZXJlbmNlcyBpbiBob21lIHJhbmdlIG92ZXJsYXAgd2l0aGluIGFuZCBiZXR3ZWVuIHNleGVzLiBJbiB0aGUgc3Vic2lkaXplZCBwb3B1bGF0aW9uLCB0aGVyZSB3YXMgdmVyeSBsaXR0bGUgbWFsZS1tYWxlIG92ZXJsYXAgd2l0aCBvbmx5IHR3byBvY2N1cmFuY2VzLCBtb3JlIGZlbWFsZS1mZW1hbGUgb3ZlcmxhcCBhbmQgbWFsZS1mZW1hbGUgb3ZlcmxhcCB3YXMgaW5jcmVhc2VkLiBNYWxlIGhvbWUgcmFuZ2VzIG9mdGVuIG92ZXJsYXBwZWQgc2V2ZXJhbCBmZW1hbGUgaG9tZSByYW5nZXMuIEdpbGEgTW9uc3RlcnMgbWF5IG5vdCBoYXZlIHRvIGludmVzdCBpbiB3aWRlIHJhbmdpbmcgZm9yYWdpbmcgZWZmb3J0cyBhcyB0aG9zZSBwb3B1bGF0aW9ucyBvZiB0aGUgdW4tc3Vic2lkaXplZCBlbnZpcm9ubWVudHMuICAKCgpPdmVydmlldyBvZiB0aGUgc3BhdGlhbCBlY29sb2d5IG9mIEdpbGEgTW9uc3RlcnMgKCpIZWxvZGVybWEgc3VzcGVjdHVtKikgYXQgU3RvbmUgQ2FueW9uIEdvbGYgQ2x1YiBhcyBhIHJlc291cmNlIHN1YnNpZGl6ZWQgcG9wdWxhdGlvbiB2cy4gT3dsIEhlYWQgQnV0dGVzIHJlcHJlc2VudGluZyB0aGUgdW5zdWJzaXplZCBuYXR1cmFsIHBvcHVsYXRpb24uIEZvciBob21lIHJhbmdlIGFuYWx5c2VzIGFuZCBvdmVybGFwLCBNaW5pbXVtIENvbnZleCBQb2x5Z29ucyAoTUNQKSBhbmQgS2VybmFsIERlbnNpdHkgRXN0aW1hdGlvbnMgKEtERSkgd2VyZSB1c2VkLgoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CiMgTE9BRCBQQUNLQUdFUyAKCmxpYnJhcnkodGlkeXZlcnNlKSAKbGlicmFyeShrbml0cikgIyAgbWFrZSB0YWJsZXMKbGlicmFyeShsZWFmbGV0KQpsaWJyYXJ5KGxtZTQpCmxpYnJhcnkobG1lclRlc3QpCmxpYnJhcnkocmVhZHIpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShkcGx5cikKbGlicmFyeShnZ2ZvcnRpZnkpCmxpYnJhcnkob3JkaW5hbCkKbGlicmFyeShsc21lYW5zKQpsaWJyYXJ5KGdnbWFwKQpsaWJyYXJ5KGdnc24pCiNrbml0cjo6b3B0c19jaHVuayRzZXQoZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDEvMykgI2ZvcmNlIGZpZ3VyZXMgdG8gYmUgY2VydGFpbiBzaXplIGFuZCBhc3BlY3QgcmF0aW8KYGBgCgoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CmdnbWFwOjpyZWdpc3Rlcl9nb29nbGUoa2V5ID0gIkFJemFTeUJqaGhFOXBlUkJtUzFoOVdZUXgxazVNRl9YQVhxVWZTcyIpCgpwMzwtIGdnbWFwKGdldF9nb29nbGVtYXAoY2VudGVyID0gYyhsb24gPSAtMTEwLjk5MDg4LCBsYXQgPSAzMi40Njg3OCksCiAgICAgICAgICAgICAgICAgICAgICAgICB6b29tID0gMTUsIHNjYWxlID0gMixtYXB0eXBlID0nc2F0ZWxsaXRlJyxhcmNoaXZpbmcgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSAnY29sb3InKSkKIyBwMwoKTG9uZ2l0dWRlPC1jKC0xMTAuOTc4LC0xMTAuOTc4LC0xMTAuOTgwLC0xMTAuOTgzLC0xMTAuOTg1LC0xMTAuOTg4LC0xMTAuOTkwLC0xMTAuOTk0LC0xMTAuOTk1LAogICAgICAgICAgICAgLTExMC45OTcsLTExMS4wMDMsLTExMS4wMDQsLTExMS4wMDQyLC0xMTEuMDAwLC0xMTAuOTk1LC0xMTAuOTg1LC0xMTAuOTc4LC0xMTAuOTgwKQoKTGF0aXR1ZGU8LWMoMzIuNDYzLDMyLjQ2MiwzMi40NjIsMzIuNDYxLDMyLjQ2MSwzMi40NjAsMzIuNDYyLDMyLjQ2NCwzMi40NjYsMzIuNDY4LDMyLjQ2OCwKICAgICAgICAgICAgMzIuNDY5LDMyLjQ3MywzMi40NzMzLDMyLjQ3MiwzMi40NzQsMzIuNDcxLDMyLjQ2NykKIApteWNvb3JkZGF0YSA8LSBhcy5kYXRhLmZyYW1lKGNiaW5kKExvbmdpdHVkZSxMYXRpdHVkZSkpCgojIGdnbWFwKHAzKSsKcDMrZ2VvbV9wb2x5Z29uKGRhdGE9bXljb29yZGRhdGEsYWVzKHg9TG9uZ2l0dWRlLHk9TGF0aXR1ZGUpLGFscGhhPTAuMixjb2xvdXI9InJlZCIsCiAgICAgICAgICAgICAgICBmaWxsPSJyZWQiKStnZW9tX3BhdGgoZGF0YT1teWNvb3JkZGF0YSxhZXMoeD1Mb25naXR1ZGUseT1MYXRpdHVkZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyPSJ3aGl0ZSIsYWxwaGE9MC40LHNpemU9MikrCiAgYW5ub3RhdGUoInRleHQiLCB4PS0xMTAuOTg5LHk9MzIuNDY4LGxhYmVsPSJTdG9uZSBDYW55b24gQ2x1YiIsY29sb3VyPSJ3aGl0ZSIsc2l6ZT0zKSsKICBzY2FsZWJhcih4Lm1pbiA9IC0xMTEuMDA1LCB4Lm1heCA9IC0xMTAuOTc1LAogICAgICAgICAgIHkubWluID0gMzIuNDU1LCB5Lm1heCA9IDMyLjQ4MCwgYW5jaG9yID0gTlVMTCwKICAgICAgICAgICBkaXN0ID0gNTAsIHRyYW5zZm9ybT1UUlVFLGRpc3RfdW5pdD0ibSIsIG1vZGVsID0gJ1dHUzg0JykrCiAgbGFicyh0aXRsZSA9ICJTQ0dDIFN0dWR5IFNpdGUgT3JvIFZhbGxleSBBcml6b25hIikKCj9zY2FsZWJhcigpCiMgYW5ub3RhdGUoInBvaW50Iix4PTcuMjU3ODg1LHk9NDYuNzkwNDksc2l6ZT03KQojIHAgKyBnZW9tX3BvaW50KGFlcyh4ID0gTG9uZ2l0dWRlLCB5ID0gTGF0aXR1ZGUsICBjb2xvdXIgPSBJbml0aWFsLlR5cGUuR3JvdXApLCBkYXRhID0gaTIsIHNpemUgPSAwLjUpICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJib3R0b20iKQpgYGAKCgpDb21wYXJlZCBob21lIHJhbmdlIHNpemVzIG9mICpIZWxvZGVybWEgc3VzcGVjdHVtKiBiZXR3ZWVuIHR3byBwb3B1bGF0aW9ucy4gT25lIHJlcHJlc2VudGVkIGEgc3Vic2lkaXplZCBwb3B1bGF0aW9uIGF0IFN0b25lIENhbnlvbiBHb2xmIENsdWIgYW5kIHRoZSBvdGhlciBhdCBPd2wgSGVhZCBCdXR0ZXMgcmVwcmVzZW50aW5nIHRoZSB1bnN1YnNpZGl6ZWQgcG9wdWxhdGlvbi4gU3RvbmUgQ2FueW9uIGlzIGxvY2F0ZWQgaW4gT3JvIFZhbGxleSBvbiB0aGUgbm9ydGggZW5kIG9mIFR1Y3NvbiwgQXJpem9uYS4gIE93bCBIZWFkIEJ1dHRlcyBpcyBsb2NhdGVkIGFib3V0IDE3IGttIHN0cmFpZ2h0IGxpbmUgZGlzdGFuY2Ugbm9ydGggd2VzdCBmcm9tIFN0b25lIENhbnlvbi4gRGF0YSBhdCBPd2wgSGVhZCB3YXMgY29sbGVjdGVkIGZyb20gMjAwMCAtIDIwMDIsIHdoaWxlIGZpeGVzIHdlcmUgY29sbGVjdGVkIGZyb20gMjAwNyAtIDIwMTMgYXQgU3RvbmUgQ2FueW9uLiBXZSBDYWxjdWxhdGVkIG1pbmltdW0gY29udmV4IHBvbHlnb25zIHVzaW5nIGJvdGggOTUgcGVyY2VudCBhbmQgMTAwIHBlcmNlbnQgb2YgdGhlIGxvY2F0aW9ucyBmb3IgZWFjaCBsaXphcmQuCgo8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+U3VtbWFyeSBvZiBob21lIHJhbmdlIHNpemUuPC9zcGFuPgoKVGFibGUgMS4gUG9vbGVkIG92ZXJhbGwgaG9tZSByYW5nZXMgb2YgR2lsYSBNb25zdGVycyBhdCBPd2wgSGVhZCBCdXR0ZXMgYW5kIFN0b25lIENhbnlvbiBHb2xmIENsdWIuIEJvdGggMTAwJSBhbmQgOTUlIE1DUHMgd2VyZSBjYWxjdWxhdGVkIGJldHdlZW4gYm90aCBwb3B1bGF0aW9ucy4gCmBgYHtyIEhvbWUgcmFuZ2Ugc2l6ZXMgb2YgU3RvbmUgQ2FueW9uIGFuZCBPd2wgSGVhZCBCdXR0ZXMgYnkgeWVhci4sIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpHTV90YWJsZSA8LSByZWFkX2NzdigiR01fdGFibGUuY3N2IikKa2FibGUoR01fdGFibGUsZm9ybWF0PSJwYW5kb2MiLCBjYXB0aW9uPSdUYWJsZSAxLiBIb21lIHJhbmdlIHNpemVzIG9mIFN0b25lIENhbnlvbiBhbmQgT3dsIGhlYWQgQnV0dGVzIHVzaW5nIGJvdGggOTUgcGVyY2VudCBhbmQgMTAwIHBlcmNlbnQgTUNQcy4nKQoKYGBgCgoKPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPkdpbGEgTW9uc3RlciBIb21lIFJhbmdlIFNpemVzIGF0IFN0b25lIENhbnlvbiB2cy4gT3dsIEhlYWQgQnV0dGVzLjwvc3Bhbj4KCmBgYHtyIFN0b25lIENhbnlvbiBWcy4gT3dsIEhlYWQgQnV0dGVzLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KeWVhciA8LSByZWFkX2NzdigiR01fQ29uc29saWRhdGVkX0J5WWVhci5jc3YiKQoKIyBxdWljayBwbG90CkdyYXBoMTwtZ2dwbG90KHllYXIsYWVzKHg9TjEwMCx5PUhvbWVfUmFuZ2VfMTAwbWNwLGdyb3VwPUVudmlyb25tZW50KSkrCiAgZ2VvbV9wb2ludChhZXMoc2hhcGUgPSBmYWN0b3IoRW52aXJvbm1lbnQpKSwgc2l6ZSA9IDIpK2dlb21fc21vb3RoKG1ldGhvZD1sbSkrc2NhbGVfY29sb3VyX21hbnVhbCh2YWx1ZXMgPSBjKHN1YnNpZGl6ZWQ9ImN5YW4zIixub25zdWJzaWRpemVkPSJpbmRpYW5yZWQxIikpK2xhYnModGl0bGUgPSAiMTAwJSBNQ1AgSG9tZSBSYW5nZXMiKSsKICB4bGFiKCJOdW1iZXIgb2YgUmVsb2NhdGlvbnMiKSt5bGFiKCJBcmVhIChoYSkgdXNpbmcgMTAwJSBNQ1AiKSsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLHNlPUZBTFNFKSsKICB0aGVtZV9idygpCgpHcmFwaDE8LUdyYXBoMSt0aGVtZShheGlzLnRpdGxlPWVsZW1lbnRfdGV4dChzaXplID0gMTQpKQoKIyBsZWdlbmQgYXQgdG9wLWxlZnQsIGluc2lkZSB0aGUgcGxvdApHcmFwaDEgKyB0aGVtZShsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgICAgIGxlZ2VuZC5qdXN0aWZpY2F0aW9uPWMoMCwxKSwKICAgICAgICAgICAgICAgbGVnZW5kLnBvc2l0aW9uPWMoMC4wNSwgMC45NSksCiAgICAgICAgICAgICAgIGxlZ2VuZC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICBsZWdlbmQua2V5ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICBsZWdlbmQuYm94LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gImJsYWNrIikpCiMgZGlyLmNyZWF0ZSgib3V0cHV0cyIpICMgY3JlYXRlIGEgbmV3IGZvbGRlciB0byBob2xkIHRoZSBvdXRwdXQgZmlsZXMKIyBnZ3NhdmUoIm91dHB1dHMvU0NfT0hCX3Bsb3QucGRmIikKYGBgCkZpZ3VyZSAxLiBOb24tU3Vic2lkaXplZCAoT3dsIEhlYWQgQnV0dGVzKSB2cy4gU3Vic2lkaXplZCAoU3RvbmUgQ2FueW9uKSBwb3B1bGF0aW9uIDEwMCUgTUNQcyBieSBudW1iZXIgb2YgZml4ZXMgYWNyb3NzIHRoZSB3aG9sZSBzdHVkeSBpbnRlcnZhbC4KCgoKPHNwYW4gc3R5bGU9ImNvbG9yOnJlZCI+UmF3IE1lYW5zIG9mIE92ZXJhbGwgSG9tZSBSYW5nZSBieSBTZXguPC9zcGFuPgogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKVGFibGUgMi4gR3JvdXAgaG9tZSByYW5nZSBtZWFucyBvZiByYXcgZGF0YSBvZiBTdG9uZSBDYW55b24gYW5kIE93bCBIZWFkIEJ1dHRlcy4gR3JvdXBlZCBieSBlbnZpcm9ubWVudCBhbmQgc2V4LgpgYGB7ciBUYWJsZSAyLiBHcm91cCBNZWFucywgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CiMgWVJfR1JQX01lYW5zIDwtIHllYXIgJT4lIAojICAgICAgICAgZ3JvdXBfYnkoRW52aXJvbm1lbnQsU2V4KSAlPiUgCiMgICAgICAgICBzdW1tYXJpc2UoSG9tZV9SYW5nZV8xMDBtY3AgPSBtZWFuKEhvbWVfUmFuZ2VfMTAwbWNwKSkKIyBZUl9HUlBfTWVhbnMKCmxpYnJhcnkoUm1pc2MpCllSX0dSUF9NZWFucyA8LSBzdW1tYXJ5U0UoeWVhciwgbWVhc3VyZXZhcj0iSG9tZV9SYW5nZV8xMDBtY3AiLCBncm91cHZhcnM9YygiRW52aXJvbm1lbnQiLCJTZXgiKSkKCmthYmxlKFlSX0dSUF9NZWFucywgZm9ybWF0ID0gInBhbmRvYyIsIGNhcHRpb24gPSAnR3JvdXAgTWVhbnMgb2YgT3ZlcmFsbCBIb21lIFJhbmdlcyBhdCBTdG9uZSBDYW55b24gYW5kIE93bCBIZWFkIEJ1dHRlcycpCmBgYAoKCgpgYGB7ciBGaWcuIDIgUmF3IE92ZXJhbCBNZWFuIEhSLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRSwgbWVzc2FnZT1GQUxTRX0KCiMgZ2dwbG90KFlSX0dSUF9NZWFucywgYWVzKHg9U2V4LHk9SG9tZV9SYW5nZV8xMDBtY3AsZmlsbD1FbnZpcm9ubWVudCkpK2dlb21fYmFyKHN0YXQ9J2lkZW50aXR5Jyxwb3NpdGlvbj0nZG9kZ2UnKStnZW9tX2Vycm9yYmFyKGFlcyh5bWluPUhvbWVfUmFuZ2VfMTAwbWNwLVNFLCB5bWF4PUhvbWVfUmFuZ2VfMTAwbWNwK1NFKSwgd2lkdGg9LjEscG9zaXRpb249cG9zaXRpb25fZG9kZ2UoLjkpKQoKUmF3LlllYXJIUjwtZ2dwbG90KFlSX0dSUF9NZWFucywgYWVzKHg9U2V4LHk9SG9tZV9SYW5nZV8xMDBtY3AsY29sb3I9RW52aXJvbm1lbnQpKStnZW9tX3BvaW50KHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKC4xKSkrZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1Ib21lX1JhbmdlXzEwMG1jcC1zZSwgeW1heD1Ib21lX1JhbmdlXzEwMG1jcCtzZSksIHdpZHRoPS4xLHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKCkpK2dndGl0bGUoIk92ZXJhbGwgSG9tZSBSYW5nZXMgYnkgU2V4IikreGxhYigiU2V4IikreWxhYigiQXJlYSAoaGEpIHVzaW5nIDEwMCUgTUNQIikrCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgY29sb3I9ImJsYWNrIiwgc2l6ZT0xNCwgZmFjZT0iYm9sZCIpKQoKUmF3LlllYXJIUiArIHRoZW1lKGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmp1c3RpZmljYXRpb249YygwLDEpLAogICAgICAgICAgICAgICAgICAgICBsZWdlbmQucG9zaXRpb249YygwLjA1LCAwLjk1KSwKICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5rZXkgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5ib3guYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvdXIgPSAiYmxhY2siKSkKYGBgCiBGaWd1cmUgMi4gUmF3IG92ZXJhbGwgbWVhbiBob21lIHJhbmdlcyBiZXR3ZWVuIGVudmlyb25tZW50IGFuZCBzZXguCiAKIAo8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+UmVwZWF0ZWQgbWVhc3VyZXMgQU5PVkEgZm9yIFllYXJseSBIb21lIFJhbmdlcyBieSBTZXguPC9zcGFuPgoKCmBgYHtyIFJlcGVhdGVkIE1lYXN1cmVzIEFOT1ZBIFlFQVIsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQojIEdldCBwLXZhbHVlcyBmcm9tIG1peGVkIG1vZGVsIEYgdmFsdWVzOgpsaWJyYXJ5KGxtZTQpCmxpYnJhcnkocmVhZHIpCnllYXIgPC0gcmVhZF9jc3YoIkdNX0NvbnNvbGlkYXRlZF9CeVllYXIuY3N2IikKCmxtZW1vZGVsLnllYXI8LWxtZXIoSG9tZV9SYW5nZV8xMDBtY3B+RW52aXJvbm1lbnQrWWVhcitTZXgrTjEwMCsoMXxHaWxhKSxkYXRhID0geWVhcikKc3VtbWFyeShsbWVtb2RlbC55ZWFyKQpgYGAKCgo8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+RGlyZWN0aW9uYWwgbWVhbnMgb2YgaG9tZSByYW5nZSB1c2luZyB0aGUgbGVhc3Qgc3F1YXJlIG1lYW5zIGJhc2VkIG9uIHNleCBiZXR3ZWVuIFN0b25lIENhbnlvbiBhbmQgT3dsIEhlYWQgQnV0dGVzLjwvc3Bhbj4KCgpgYGB7ciBEaXJlY3Rpb25hbCBNZWFucywgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CmxpYnJhcnkob3JkaW5hbCkKbGlicmFyeShsc21lYW5zKQoKUk1tb2QueWVhcjwtbG1lcihIb21lX1JhbmdlXzEwMG1jcH5FbnZpcm9ubWVudCtOMTAwK1llYXIrU2V4K04xMDArKDF8R2lsYSksZGF0YSA9IHllYXIpCgpSTS5tYXJnaW5hbCA8LSBsc21lYW5zKFJNbW9kLnllYXIsIAogICAgICAgICAgICAgICAgICAgIH4gRW52aXJvbm1lbnQpCiMgUk0ubWFyZ2luYWwKCiMjIENBVEFHT1JJWkUgTFNNIEdSQVBIIEJZIFNFWCBCRVRXRUVOIEVOVklST05NRU5UOgpyZWZSTV9zZXggPC0gbHNtZWFucyhSTW1vZC55ZWFyLCBzcGVjcyA9IGMoIlNleCIsIkVudmlyb25tZW50IikpCiMgcmVmUk1fc2V4CnJlZl9kZlJNX3NleCA8LSBhcy5kYXRhLmZyYW1lKHN1bW1hcnkocmVmUk1fc2V4KSkKcGRfUk0gPC0gcG9zaXRpb25fZG9kZ2UoMC4xKQpnNFJNX3NleCA8LSBnZ3Bsb3QocmVmX2RmUk1fc2V4LCBhZXMoeD1TZXgsIHk9bHNtZWFuLGdyb3VwPUVudmlyb25tZW50LCBjb2xvdXI9RW52aXJvbm1lbnQpKSsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluPWxzbWVhbi1TRSwgeW1heD1sc21lYW4rU0UpLCB3aWR0aD0uMSxwb3NpdGlvbj1wZF9STSkgKwogIGdlb21fcG9pbnQocG9zaXRpb249cGRfUk0pK3RoZW1lX2NsYXNzaWMoKStnZ3RpdGxlKCJBZGp1c3RlZCBPdmVyYWxsIEhvbWUgUmFuZ2VzIGJ5IFNleCIpK3hsYWIoIlNleCIpK3lsYWIoIkFyZWEgKGhhKSB1c2luZyAxMDAlIE1DUCIpKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGNvbG9yPSJibGFjayIsIHNpemU9MTQsIGZhY2U9ImJvbGQiKSkKIyBSTV9MU01ncmFwaF9zZXg8LXByaW50KGc0Uk1fc2V4KQojIGdnc2F2ZSgib3V0cHV0cy9MU01fWWVhcl9wbG90LnBkZiIpCmc0Uk1fc2V4ICsgdGhlbWUobGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICAgICAgICBsZWdlbmQuanVzdGlmaWNhdGlvbj1jKDAsMSksCiAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5wb3NpdGlvbj1jKDAuMDUsIDAuOTUpLAogICAgICAgICAgICAgICAgICAgICBsZWdlbmQuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmtleSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmJveC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJibGFjayIpKQojIGdnc2F2ZSgib3V0cHV0cy9MU01fWWVhcl9wbG90LnBkZiIpCmBgYApGaWd1cmUgMy4gQWRqdXN0ZWQgbWVhbnMgb2YgaG9tZSByYW5nZXMgYmV0d2VlbiBlbnZpcm9ubWVudCBhbmQgc2V4LiBBZGp1c3RlZCBmb3Igc2FtcGxlIHNpemUsIHllYXIgYW5kIHNleC4gCgoKUG9zdC1Ib2MgY29tcGFyaXNvbnMgYmV0d2VlbiBzZXhlczoKYGBge3IgQ29tcHMgZm9yIFNleCwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9ClJNbW9kLnllYXI8LWxtZXIoSG9tZV9SYW5nZV8xMDBtY3B+RW52aXJvbm1lbnQrTjEwMCtZZWFyK1NleCtOMTAwKygxfEdpbGEpLGRhdGEgPSB5ZWFyKQpTZXguZW1tLm9hIDwtIGVtbWVhbnMoUk1tb2QueWVhciwgIkVudmlyb25tZW50IiwiU2V4IikKcGFpcnMoU2V4LmVtbS5vYSkKYGBgCgoKR3JhcGhpY2FsIENvbXBhcmlzb25zIG9mIFNleCBiZXR3ZWVuIHRoZSB0d28gcG9wdWxhdGluczoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CnBsb3QoU2V4LmVtbS5vYSwgY29tcGFyaXNvbnMgPSBUUlVFKQpgYGAKCgpUYWJsZSAzLiBEaXJlY3Rpb24gbWVhbnMgb2YgaG9tZSByYW5nZSBhZnRlciBiZWluZyBhZGp1c3RlZCBmb3IgeWVhciwgc2V4IGFuZCBzYW1wbGUgc2l6ZS4KYGBge3IgVGFibGUgb2YgTGVhc3QgU3F1YXJlIE1lYW5zLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0Ka2FibGUocmVmX2RmUk1fc2V4LCBmb3JtYXQgPSAicGFuZG9jIiwgY2FwdGlvbiA9ICdBZGp1c3RlZCBNZWFucyBvZiBNYWxlIHZzLiBGZW1hbGUgaG9tZSByYW5nZXMgYXQgU3RvbmUgQ2FueW9uIGFuZCBPd2wgSGVhZCBCdXR0ZXMuJykgCmBgYAogCiAgCjxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj5TZWFzb25hbCBIb21lIFJhbmdlLjwvc3Bhbj4KCkhvbWUgcmFuZ2UgYW5hbHlzaXMgYnJva2VuIGRvd24gYnkgZml2ZSBzZWFzb25zOyBFbWVyZ2VuY2UsIERyeSwgTW9uc29vbiwgUG9zdCBNb25zb29uLiBUaGUgc3RhcnQgb2YgZW1lcmdlbmNlIHdhcyBkZWZpbmVkIGJ5IHdoZW4gbW92ZW1lbnQgcGF0dGVybnMgaW5jcmVhc2VkIGZyb20gbm9uZS9taW5pbWFsIHRvIHRoZSBzdGFydCBvZiBoaWdoIGFjdGl2aXR5LiBFZmZvcnQgd2FzIHRha2VuIHRvIG1hdGNoIGFzIGNsb3NlbHkgYXMgcG9zc2libGUgdG8gdGhlIE93bCBIZWFkIEJ1dHRlcyBlbWVyZ2VuY2UgZGF0ZSBpbnRlcnZhbC4gTW9uc29vbiBzZWFzb24gd2FzIGFkanVzdGVkIHVzaW5nIE5PQUEgY2xpbWF0ZSBkYXRhLiBUaGUgc3RhcnQgb2Ygd2FzIGRlZmluZWQgd2hlbiB0aGUgbWVhbiBkZXcgcG9pbnQgdGVtcGVyYXR1cmVzIG9mIHRocmVlIGNvbnNlY3V0aXZlIGRheXMgd2VyZSBncmVhdGVyIHRoYW4gNTUgZGVncmVlcy4gCgpTY2FsaW5nIGhvbWUgcmFuZ2UgYW5hbHlzZXMgYnkgc2Vhc29uYWwgZXN0aW1hdGVzIHJlZHVjZXMgdGhlIG51bWJlciBvciBsb2NhdGlvbnMgZm9yIGVhY2ggbGl6YXJkLiAxMDAgcGVyY2VudCBNQ1BzIHdlcmUgdXNlZCBmb3Igc2Vhc29uYWwgaG9tZSByYW5nZSBhbmFseXNlcyB0byBhdm9pZCBhbnkgZnVydGhlciByZWR1Y3Rpb24gb2YgbG9jYXRpb25zIGZvciBlYWNoIGVzdGltYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApUYWJsZSA0LiBSYXcgZ3JvdXAgbWVhbnMgb2YgaG9tZSByYW5nZXMgZ3JvdXBlZCBieSBlbnZpcm9ubWVudCBzZWFzb24uCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpzZWFzb25hbDwtcmVhZC5jc3YoIlNDX1NlYXNvbmFsX0RhdGEuY3N2IikKCmxpYnJhcnkoUm1pc2MpCgpTRUFTX0dSUF9NZWFucyA8LSBzdW1tYXJ5U0Uoc2Vhc29uYWwsIG1lYXN1cmV2YXI9IkhvbWVfUmFuZ2VfMTAwbWNwIiwgZ3JvdXB2YXJzPWMoIkVudmlyb25tZW50IiwiU2Vhc29uIiksIG5hLnJtID0gVFJVRSkKCiMgU0VBU19HUlBfTWVhbnMKa2FibGUoU0VBU19HUlBfTWVhbnMsIGZvcm1hdCA9ICJwYW5kb2MiLCBjYXB0aW9uID0gJ1JhdyBHcm91cCBNZWFucyBvZiBTZWFzb25hbCBIb21lIFJhbmdlcyBhdCBTdG9uZSBDYW55b24nKQpgYGAKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCmBgYHtyIFJhdyBTZWFzb25hbCBIUiwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9ClJhdy5TZWFzSFI8LWdncGxvdChTRUFTX0dSUF9NZWFucywgYWVzKHg9U2Vhc29uLHk9SG9tZV9SYW5nZV8xMDBtY3AsY29sb3I9RW52aXJvbm1lbnQpKStnZW9tX3BvaW50KHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKC4xKSkrZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1Ib21lX1JhbmdlXzEwMG1jcC1zZSwgeW1heD1Ib21lX1JhbmdlXzEwMG1jcCtzZSksIHdpZHRoPS4xLHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKCkpK2dndGl0bGUoIlJhdyBTZWFzb25hbCBIb21lIFJhbmdlcyIpK3hsYWIoIlNlYXNvbiIpK3lsYWIoIkFyZWEgKGhhKSB1c2luZyAxMDAlIE1DUCIpKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGNvbG9yPSJibGFjayIsIHNpemU9MTQsIGZhY2U9ImJvbGQiKSkKClJhdy5TZWFzSFI8LVJhdy5TZWFzSFIgKyB0aGVtZShsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5qdXN0aWZpY2F0aW9uPWMoMCwxKSwKICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLnBvc2l0aW9uPWMoMC4wNSwgMC45NSksCiAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICAgICAgICBsZWdlbmQua2V5ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICAgICAgICBsZWdlbmQuYm94LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gImJsYWNrIikpClJhdy5TZWFzSFIrc2NhbGVfeF9kaXNjcmV0ZShsaW1pdHM9IGMoIkVtZXJnZW5jZSIsIkRyeSIsIk1vbnNvb24iLCJQb3N0X01vbnNvb24iKSkKYGBgCkZpZ3VyZSA0LiBSYXcgc2Vhc29uYWwgaG9tZSByYW5nZSBtZWFucyBncm91cGVkIGJ5IGVudmlyb25tZW50IGFuZCBzZXguIEJvdGggdGhlIG5vbi1zdWJzaWRpemVkIGFuZCBzdWJzaWRpemVkIHBvcHVsYXRpb25zIGZvbGxvdyBzaW1pbGFyIHBhdHRlcm5zLCBidXQgd2l0aCB0aGUgc3Vic2lkaXplZCBtZWFucyBsZXNzIHRoYW4gdGhvc2Ugb2YgdGhlIG5vbi1zdWJzaWRpemVkIHBvcHVsYXRpb24uCgoKPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPlJlcGVhdGVkIG1lYXN1cmVzIEFOT1ZBIGZvciBTZWFzb25zLjwvc3Bhbj4KCgpUYWJsZSA1LiBBZGp1c3RlZCBzZWFzb25hbCBtZWFucyBvZiBob21lIHJhbmdlIGJldHdlZW4gdGhlIG5vbi1zdWJzaWRpemVkIGFuZCBzdWJzaWRpemVkIHBvcHVsYXRpb25zLiBUaGUgZW1lcmdlbmNlIGFuZCBwb3N0LW1vbnNvb24gc2Vhc29uIGJldHdlZW4gdGhlIHR3byBwb3B1bGF0aW9ucyBzaG93IHNpbWlsYXIgaG9tZSByYW5nZSBzaXplcy4gRGlmZmVyZW5jZXMgaW4gaG9tZSByYW5nZSBzaXplcyBiZXR3ZWVuIHRoZSB0d28gcG9wdWxhdGlvbnMgaXMgZHVyaW5nIHRoZSBkcnkgYW5kIG1vbnNvb24gc2Vhc29ucy4KYGBge3IgVGFibGUgNS4gQWRqdXN0ZWQgU2Vhc29uYWwgSFIsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpsc21lYW4uc2Vhc29uYWw8LXJlYWQuY3N2KCJzZWFzb25hbC5sc21lYW5zX3RhYmxlLmNzdiIpCmthYmxlKGxzbWVhbi5zZWFzb25hbCwgZm9ybWF0ID0gInBhbmRvYyIsIGNhcHRpb24gPSAnQWRqdXN0ZWQgU2Vhc29uYWwgTWVhbnMgb2YgSG9tZSBSYW5nZXMgYXQgU3RvbmUgQ2FueW9uIGFuZCBPd2wgSGVhZCBCdXR0ZXMuJykKYGBgCgoKYGBge3IgUk1BTk9WQSBTZWFzb25hbCBIUiwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CmxpYnJhcnkobG1lNCkKbGlicmFyeShyZWFkcikKbGlicmFyeShsbWVyVGVzdCkKIyBzZWFzb25hbDwtcmVhZC5jc3YoIlNDX1NlYXNvbmFsX0RhdGEuY3N2IikKClJNLm1vZC5TZWFzb24gPC0gbG1lcihIb21lX1JhbmdlXzEwMG1jcH5FbnZpcm9ubWVudCtTZWFzb24rU2V4K04rKDF8R2lsYSksIGRhdGE9c2Vhc29uYWwpCnN1bW1hcnkoUk0ubW9kLlNlYXNvbikKCiMgYW5vdmEoUk0ubW9kLlNlYXNvbikKCiMgIyBtYXJnaW5hbC5zZWFzb24gPC0gbHNtZWFucyhSTS5tb2QuU2Vhc29uLCAKIyAjICAgICAgICAgICAgICAgICAgICB+IEVudmlyb25tZW50KQojICMgbWFyZ2luYWwuc2Vhc29uCmBgYAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKYGBge3IgQWRqdXN0ZWQgU2Vhc29uYWwgSFIsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpsaWJyYXJ5KG9yZGluYWwpCmxpYnJhcnkobHNtZWFucykKCiMgIyBtYXJnaW5hbC5zZWFzb24gPC0gbHNtZWFucyhSTS5tb2QuU2Vhc29uLCAKIyAjICAgICAgICAgICAgICAgICAgICB+IEVudmlyb25tZW50KQojICMgbWFyZ2luYWwuc2Vhc29uCiMgCiMgcmVmLnNlYXNvbjIgPC0gbHNtZWFucyhSTS5tb2QuU2Vhc29uLCBzcGVjcyA9IGMoIlNlYXNvbiIsIkVudmlyb25tZW50IikpCiMgIyByZWYuc2Vhc29uMgojIHJlZl9kZnNlYXNvbjIgPC0gYXMuZGF0YS5mcmFtZShzdW1tYXJ5KHJlZi5zZWFzb24yKSkKIyBwZC5STVMgPC0gcG9zaXRpb25fZG9kZ2UoMC4xKQojIGc0c2Vhc29uMiA8LSBnZ3Bsb3QocmVmX2Rmc2Vhc29uMiwgYWVzKHg9U2Vhc29uLCB5PWxzbWVhbixncm91cD1FbnZpcm9ubWVudCwgY29sb3VyPUVudmlyb25tZW50KSkrCiMgICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluPWxzbWVhbi1TRSwgeW1heD1sc21lYW4rU0UpLCB3aWR0aD0uMSxwb3NpdGlvbj1wZC5STVMpICsKIyAgIGdlb21fbGluZShwb3NpdGlvbj1wZC5STVMpKwojICAgZ2VvbV9wb2ludChwb3NpdGlvbj1wZC5STVMpK3RoZW1lX2NsYXNzaWMoKStnZ3RpdGxlKCJBZGp1c3RlZCBTZWFzb25hbCBIb21lIFJhbmdlcyIpK3hsYWIoIlNlYXNvbiIpK3lsYWIoIkFyZWEgKGhhKSB1c2luZyAxMDAlIE1DUCIpK3RoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGNvbG9yPSJibGFjayIsIHNpemU9MTQsIGZhY2U9ImJvbGQiKSkKIyAjIExTTWdyYXBoc2Vhc29uPC1wcmludChnNHNlYXNvbikKIyBnNHNlYXNvbjI8LWc0c2Vhc29uMiArIHRoZW1lKGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWdlbmQuanVzdGlmaWNhdGlvbj1jKDAsMSksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLnBvc2l0aW9uPWMoMC4wNSwgMC45NSksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmtleSA9IGVsZW1lbnRfYmxhbmsoKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWdlbmQuYm94LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gImJsYWNrIikpCmc0c2Vhc29uMitzY2FsZV94X2Rpc2NyZXRlKGxpbWl0cz0gYygiRW1lcmdlbmNlIiwiRHJ5IiwiTW9uc29vbiIsIlBvc3RfTW9uc29vbiIpKQojIGdnc2F2ZSgib3V0cHV0cy9MU01fU2Vhc29uLnBkZiIpCmBgYApGaWd1cmUgNS4gQWRqdXN0ZWQgc2Vhc29uYWwgaG9tZSByYW5nZXMgYmV0d2VlbiB0aGUgdHdvIHBvcHVsYXRpb25zIGFmdGVyIGJlaW5nIGFkanVzdGVkIGZvciBzZWFzb24sIHNleCBhbmQgc2FtcGxlIHNpemUgYnkgUk1BTk9WQS4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKVGFibGUgNi4gTWVhbiBpbmRpdmlkdWFsIHNlYXNvYW5sIGhvbWUgcmFuZ2VzIHBvb2xlZCBmcm9tIHRoZSBlbnRpcmUgc3R1ZHkgcGVyaW9kLiBNaXNzaW5nIHZhbHVlcyBhcmUgZGVwaWN0ZWQgd2hlcmUgbm8gbG9jYXRpb25zIGZvciB0aGF0IGFuaW1hbCBkdXJpbmcgdGhhdCBwZXJpb2Qgd2VyZSBzdWNjZXNzZnVsbC4KYGBge3IgVGFibGUgNi4gTWVhbiBJbmQuIFNlYXNvbmFsIEhSLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KU2Vhcy5JbmQuTWVhbnM8LXJlYWQuY3N2KCJTZWFzb25hbCBIUiBUYWJsZS5jc3YiKQprYWJsZShTZWFzLkluZC5NZWFucywgZm9ybWF0ID0gInBhbmRvYyIsIGNhcHRpb24gPSAnU2Vhc29uYWwgSW5kaXZpZHVhbCBIb21lIFJhbmdlcy4nKQpgYGAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPkdpbGEgTW9uc3RlciBIb21lIFJhbmdlIE92ZXJsYXAgb2YgMTAwJSBNQ1BzLjwvc3Bhbj4KCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQojIyBTZXQgcHJvamVjdGlvbiBmb3IgbWFwcGluZzoKQ1JTLlNDPC1DUlMoIitwcm9qPXV0bSArem9uZT0xMiArZWxscHM9V0dTODQgK3VuaXRzPW0gK25vX2RlZnMiKQpgYGAKCmBgYHtyIEludGVyYWN0aXZlIE1hcCBvZiAxMDAlIE1DUHMsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQojIyBDcmVhdGUgTUNQIFBvbHlnb24gZm9yIG1hcHZpZXcoKToKTTY3X01DUDwtbWNwX2FuYWx5c2lzLlBPTFkoJy4vTTY3L002NyAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpNNjlfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9NNjkvTTY5IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCk0yNTVfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9NMjU1L00yNTUgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKTTIxNV9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL00yMTUvTTIxNSAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpNMTRfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9NMTQvTTE0IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCk0xMTlfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9NMTE5L00xMTkgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKTTExMl9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL00xMTIvTTExMiAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQoKRjY2X01DUDwtbWNwX2FuYWx5c2lzLlBPTFkoJy4vRjY2L0Y2NiAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpGMzZfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9GMzYvRjM2IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCkYyNTJfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9GMjUyL0YyNTIgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKRjIxNF9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL0YyMTQvRjIxNCAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpGMjAwX01DUDwtbWNwX2FuYWx5c2lzLlBPTFkoJy4vRjIwMC9GMjAwIC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCkYxNDdfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9GMTQ3L0YxNDcgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKRjE0Nl9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL0YxNDYvRjE0NiAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpGMTM3X01DUDwtbWNwX2FuYWx5c2lzLlBPTFkoJy4vRjEzNy9GMTM3IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCkYxMzVfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9GMTM1L0YxMzUgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKRjExNF9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL0YxMTQvRjExNCAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpGMTA0X01DUDwtbWNwX2FuYWx5c2lzLlBPTFkoJy4vRjEwNC9GMTA0IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCgpNYWxlLk1DUCA8LSByYmluZChNNjdfTUNQLE02OV9NQ1AsTTI1NV9NQ1AsTTIxNV9NQ1AsTTE0X01DUCxNMTE5X01DUCxNMTEyX01DUCkKCkZlbWFsZS5NQ1AgPC0gcmJpbmQoRjY2X01DUCxGMzZfTUNQLEYyNTJfTUNQLEYyMTRfTUNQLEYyMDBfTUNQLEYxNDdfTUNQLEYxNDZfTUNQLEYxMzdfTUNQLAogICAgICAgICAgICAgICAgICAgIEYxMzVfTUNQLEYxMTRfTUNQLEYxMDRfTUNQKQoKbWFwdmlld09wdGlvbnMoYmFzZW1hcHMgPSBjKCJPcGVuU3RyZWV0TWFwIiwiRXNyaS5Xb3JsZEltYWdlcnkiLCJPcGVuVG9wb01hcCIpLAogICAgICAgICAgICAgICBuYS5jb2xvciA9ICJtYWdlbnRhIiwKICAgICAgICAgICAgICAgbGF5ZXJzLmNvbnRyb2wucG9zID0gInRvcGxlZnQiKQoKbWFwdmlldyhNYWxlLk1DUCwgbGVnZW5kPUYsIHpjb2w9ImlkIiwgY29sLnJlZ2lvbnMgPSBjKCJibHVlIiksIGFscGhhLnJlZ2lvbnM9MC4zKSArIAogIG1hcHZpZXcoRmVtYWxlLk1DUCwgbGVnZW5kPUYsIHpjb2wgPSAiaWQiLCBjb2wucmVnaW9ucyA9IGMoInJlZCIpLCBhbHBoYS5yZWdpb25zPTAuMykKYGBgCkZpZ3VyZSA0LiBIb21lIFJhbmdlIG92ZXJsYXAgYnkgc2V4IG9mIDEwMCUgTUNQcyBhdCBTdG9uZSBDYW55b24uIFJlZCBwb2x5Z29ucyByZXByZXNlbnQgZmVtYWxlIGxpemFyZHMsIGFuZCBibHVlIHJlcHJlc2VudHMgbWFsZSBsaXphcmRzLiAKClRoZSBTdG9uZSBDYW55b24gcG9wdWxhdGlvbiBzZWVtcyB0byBleGhpYml0IGdyZWF0ZXIgZmVtYWxlLWZlbWFsZSBvdmVybGFwIGFzIHdlbGwgYXMgY29uc2lkZXJhYmxlIG92ZXJsYXAgb2YgbWFsZS1mZW1hbGUgaG9tZSByYW5nZXMuIFRoZXJlIGFwcGVhcnMgdG8gYmUgbGltaXRlZCBtYWxlLW1hbGUgb3ZlcmxhcCwgd2l0aCBvY2N1cmFuY2UgaGFwcGVuaW5nIGluIG9ubHkgdHdvIG1hbGUtbWFsZSBob21lIHJhbmdlIHBvbHlnb25zLiBUaGlzIGZpbmRpbmcgaXMgaW4gY29udHJhc3QgdG8gdGhlIE93bCBIZWFkIGJ1dHRlcyBzdHVkeSB3aGljaCByZXZlYWxlZCB0aGF0IHRoZXJlIHdhcyBhIGxhcmdlIGRlZ3JlZSBvZiBvdmVybGFwIGFtb25nIG1hbGUtZmVtYWxlIGFuZCBtYWxlLW1hbGUgb3ZlcmxhcHMgKFRhYmxlIDQpLiBHaWxsYXJkbyBjb25jbHVkZWQgdGhhdCwgaW4gdGhlaXIgc3R1ZHksIHRoZSBoaWdoIGRlZ3JlZSBvZiBvdmVybGFwIGluIG1hbGVzLW1hbGVzIGludGVyYWN0aW9ucyBtYXkgYmUgZHVlIHRvIGhhdmluZyBsYXJnZXIgaG9tZSByYW5nZXMgZm9yIG1hdGUgc2VhcmNoaW5nIGFjdGl2aXRpZXMuIE1hbGVzIG1heSBoYXZlIGFuZCBpbmNyZWFzZWQgaG9tZSByYW5nZSBzaXplIHRvIG1heGltaXplIHRoZWlyIGFjY2VzcyB0byBtdWx0aXBsZSBmZW1hbGVzLiBTaGUgY29uY2x1ZGVkIHRoYXQgdGhlIGxhY2sgb2YgZmVtYWxlLWZlbWFsZSBvdmVybGFwIG1heSBiZSBkdWUgdG8gc21hbGxlciBob21lIHJhbmdlIHNpemVzLiAKCkF0IFN0b25lIENhbnlvbiwgbWFsZXMgaGF2ZSByZWR1Y2VkIGhvbWUgcmFuZ2Ugc2l6ZXMgKFRhYmxlIDI7IEZpZy4gMikuIEhvd2V2ZXIsIG1hbGVzIHN0aWxsIHJldGFpbiBob21lIHJhbmdlIG92ZXJsYXAgd2l0aCBtdWx0aXBsZSBmZW1hbGVzIHdoaWxlIGhhdmluZyByZWR1Y2VkIGNvbnRhY3Qgd2l0aCBvdGhlciBtYWxlcy4gVGhpcyBtYXkgYmUgaW4gcmVzcG9uc2UgdG8gbnV0cmllbnQgc3Vic2lkaWVzIHRoYXQgcmVkdWNlIHRoZSBuZWVkIHRvIGhhdmUgZXhwYW5kZWQgaG9tZSByYW5nZSBzaXplcyBmb3IgZm9yYWdpbmcgYWN0aXZpdGllcyBmb3IgYm90aCBtYWxlcyBhbmQgZmVtYWxlcy4gVGhlcmUgbWF5IGFsc28gYmUgYSBoaWdoZXIgZGVuc2l0eSBvZiBmZW1hbGVzIGFzIGEgcmVzcG9uc2UgdG8gcmVzb3VyY2UgYXZhaWxhYmlsaXR5IGFuZCByZWR1Y2VkIHJhbmdlIHJlcXVpcmVtZW50cy4gTWFsZXMgYXJlIG5vdCBmb3JjZWQgdG8gZXhwYW5kIGhvbWUgcmFuZ2VzIGZvciBtYXRlIHNlYXJjaGluZyB0byB0aGUgZXh0YW50IHRoYXQgaW5kaXZpZHVhbHMgYXQgT3dsIEhlYWQgQnV0dGVzIG1heSBiZSBzdWJqZWN0IHRvLiAKClRhYmxlIDQuIEhvbWUgcmFuZ2Ugb3ZlcmxhcCBvZiBHaWxhIE1vbnN0ZXJzIGF0IHRoZSBudXRyaWVudCBzdWJzaWRpemVkIHNpdGUuIE1hbGUtbWFsZSBvdmVybGFwcyBvbmx5IG9jY3VyZWQgYmV0d2VlbiB0d28gcGFpcnMgb2YgbWFsZXM6IE0xNC1NNjkgYW5kIE0xMTktTTIxNSBhdCAwLjUgaGEuIGFuZCAxOS41IGhhLiByZXNwZWN0aXZlbHkgYW5kIHdlcmUgdGhlcmVmb3JlIG5vdCBpbmNsdWRlZCBpbiB0aGUgdGFibGUuIApgYGB7ciBUYWJsZSA0LiBIUiBPdmVybGFwLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KT0xfVGFibGU8LXJlYWQuY3N2KCJPdmVyTGFwX1RhYmxlLmNzdiIpCgprYWJsZShPTF9UYWJsZSwgZm9ybWF0ID0gInBhbmRvYyIsIGNhcHRpb24gPSAnSG9tZSByYW5nZSBvdmVybGFwIG9mIFN0b25lIENhbnlvbiBHaWxhIE1vbnN0ZXJzIHVzaW5nIDEwMCUgTUNQcy4nKQpgYGAKCgo8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+R2lsYSBNb25zdGVyIEhvbWUgUmFuZ2UgU2hpZnRzIG9mIDEwMCUgTUNQcy48L3NwYW4+CgpgYGB7ciBGaWcgNS4gWWVhcmx5IEhSIFNoaWZ0cywgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CiMjIENyZWF0ZSBNQ1AgcG9seWdvbnMgYnkgWUVBUjoKTTIxNV9tY3AuMTE8LW1jcF9hbmFseXNpcy5QT0xZKCIuL00yMTUvMjAxMSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpNMjE1X21jcC4xMjwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTIxNS8yMDEyIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxMDRfbWNwLjA4PC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTA0LzIwMDggLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjEwNF9tY3AuMDk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMDQvMjAwOSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTE0X21jcC4wODwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjExNC8yMDA4IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxMTRfbWNwLjA5PC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTE0LzIwMDkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjExNF9tY3AuMTA8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMTQvMjAxMCAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTE0X21jcC4xMTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjExNC8yMDExIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxMTRfbWNwLjEyPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTE0LzIwMTIgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjEzN19tY3AuMDk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMzcvMjAwOSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTM3X21jcC4xMDwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjEzNy8yMDEwIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxMzdfbWNwLjExPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTM3LzIwMTEgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjE0N19tY3AuMDk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxNDcvMjAwOSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTQ3X21jcC4xMDwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjE0Ny8yMDEwIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxNDdfbWNwLjExPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTQ3LzIwMTEgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjE0N19tY3AuMTI8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxNDcvMjAxMiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMzZfbWNwLjA4PC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMzYvMjAwOCAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMzZfbWNwLjA5PC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMzYvMjAwOSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMzZfbWNwLjEwPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMzYvMjAxMCAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMzZfbWNwLjExPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMzYvMjAxMSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMzZfbWNwLjEyPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMzYvMjAxMiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGNjZfbWNwLjA4PC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GNjYvMjAwOCAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGNjZfbWNwLjA5PC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GNjYvMjAwOSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGNjZfbWNwLjEwPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GNjYvMjAxMCAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpNMTE5X21jcC4wODwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTExOS8yMDA4IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCk0xMTlfbWNwLjA5PC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMTE5LzIwMDkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTExOV9tY3AuMTA8LW1jcF9hbmFseXNpcy5QT0xZKCIuL00xMTkvMjAxMCAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpNMTEyX21jcC4wNzwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTExMi8yMDA3IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCk0xMTJfbWNwLjA5PC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMTEyLzIwMDkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTExMl9tY3AuMTA8LW1jcF9hbmFseXNpcy5QT0xZKCIuL00xMTIvMjAxMCAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpNNjlfbWNwLjA5PC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NNjkvMjAwOSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpNNjlfbWNwLjEwPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NNjkvMjAxMCAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQoKIyMgRm9ydGlmeSBtY3AgcG9seWdvbnMgZm9yIGdncGxvdDIgKllFQVIqOgpGMTA0X21jcC4wOFQgPC0gZm9ydGlmeShGMTA0X21jcC4wOCwgcmVnaW9uID0gImlkIikKRjEwNF9tY3AuMDlUIDwtIGZvcnRpZnkoRjEwNF9tY3AuMDksIHJlZ2lvbiA9ICJpZCIpCkYxMTRfbWNwLjA4VCA8LSBmb3J0aWZ5KEYxMTRfbWNwLjA4LCByZWdpb24gPSAiaWQiKQpGMTE0X21jcC4wOVQgPC0gZm9ydGlmeShGMTE0X21jcC4wOSwgcmVnaW9uID0gImlkIikKRjExNF9tY3AuMTBUIDwtIGZvcnRpZnkoRjExNF9tY3AuMTAsIHJlZ2lvbiA9ICJpZCIpCkYxMTRfbWNwLjExVCA8LSBmb3J0aWZ5KEYxMTRfbWNwLjExLCByZWdpb24gPSAiaWQiKQpGMTE0X21jcC4xMlQgPC0gZm9ydGlmeShGMTE0X21jcC4xMiwgcmVnaW9uID0gImlkIikKRjEzN19tY3AuMDlUIDwtIGZvcnRpZnkoRjEzN19tY3AuMDksIHJlZ2lvbiA9ICJpZCIpCkYxMzdfbWNwLjEwVCA8LSBmb3J0aWZ5KEYxMzdfbWNwLjEwLCByZWdpb24gPSAiaWQiKQpGMTM3X21jcC4xMVQgPC0gZm9ydGlmeShGMTM3X21jcC4xMSwgcmVnaW9uID0gImlkIikKRjE0N19tY3AuMDlUIDwtIGZvcnRpZnkoRjE0N19tY3AuMDksIHJlZ2lvbiA9ICJpZCIpCkYxNDdfbWNwLjEwVCA8LSBmb3J0aWZ5KEYxNDdfbWNwLjEwLCByZWdpb24gPSAiaWQiKQpGMTQ3X21jcC4xMVQgPC0gZm9ydGlmeShGMTQ3X21jcC4xMSwgcmVnaW9uID0gImlkIikKRjE0N19tY3AuMTJUIDwtIGZvcnRpZnkoRjE0N19tY3AuMTIsIHJlZ2lvbiA9ICJpZCIpCkYzNl9tY3AuMDhUIDwtIGZvcnRpZnkoRjM2X21jcC4wOCwgcmVnaW9uID0gImlkIikKRjM2X21jcC4wOVQgPC0gZm9ydGlmeShGMzZfbWNwLjA5LCByZWdpb24gPSAiaWQiKQpGMzZfbWNwLjEwVCA8LSBmb3J0aWZ5KEYzNl9tY3AuMTAsIHJlZ2lvbiA9ICJpZCIpCkYzNl9tY3AuMTFUIDwtIGZvcnRpZnkoRjM2X21jcC4xMSwgcmVnaW9uID0gImlkIikKRjM2X21jcC4xMlQgPC0gZm9ydGlmeShGMzZfbWNwLjEyLCByZWdpb24gPSAiaWQiKQpGNjZfbWNwLjA4VCA8LSBmb3J0aWZ5KEY2Nl9tY3AuMDgsIHJlZ2lvbiA9ICJpZCIpCkY2Nl9tY3AuMDlUIDwtIGZvcnRpZnkoRjY2X21jcC4wOSwgcmVnaW9uID0gImlkIikKRjY2X21jcC4xMFQgPC0gZm9ydGlmeShGNjZfbWNwLjEwLCByZWdpb24gPSAiaWQiKQpNMTE5X21jcC4wOFQgPC0gZm9ydGlmeShNMTE5X21jcC4wOCwgcmVnaW9uID0gImlkIikKTTExOV9tY3AuMDlUIDwtIGZvcnRpZnkoTTExOV9tY3AuMDksIHJlZ2lvbiA9ICJpZCIpCk0xMTlfbWNwLjEwVCA8LSBmb3J0aWZ5KE0xMTlfbWNwLjEwLCByZWdpb24gPSAiaWQiKQpNMTEyX21jcC4wN1QgPC0gZm9ydGlmeShNMTEyX21jcC4wNywgcmVnaW9uID0gImlkIikKTTExMl9tY3AuMDlUIDwtIGZvcnRpZnkoTTExMl9tY3AuMDksIHJlZ2lvbiA9ICJpZCIpCk0xMTJfbWNwLjEwVCA8LSBmb3J0aWZ5KE0xMTJfbWNwLjEwLCByZWdpb24gPSAiaWQiKQpNNjlfbWNwLjA5VCA8LSBmb3J0aWZ5KE02OV9tY3AuMDksIHJlZ2lvbiA9ICJpZCIpCk02OV9tY3AuMTBUIDwtIGZvcnRpZnkoTTY5X21jcC4xMCwgcmVnaW9uID0gImlkIikKTTIxNV9tY3AuMTFUIDwtIGZvcnRpZnkoTTIxNV9tY3AuMTEsIHJlZ2lvbiA9ICJpZCIpCk0yMTVfbWNwLjEyVCA8LSBmb3J0aWZ5KE0yMTVfbWNwLjEyLCByZWdpb24gPSAiaWQiKQoKbWNwLnNoaWZ0LlRFU1Q0IDwtIGdncGxvdCgpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTA0X21jcC4wOFQsIGFlcyh4PUYxMDRfbWNwLjA4VCRsb25nLCB5PUYxMDRfbWNwLjA4VCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9MikgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMDRfbWNwLjA5VCwgYWVzKHg9RjEwNF9tY3AuMDlUJGxvbmcsIHk9RjEwNF9tY3AuMDlUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT0yKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjExNF9tY3AuMDhULCBhZXMoeD1GMTE0X21jcC4wOFQkbG9uZywgeT1GMTE0X21jcC4wOFQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTMpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTE0X21jcC4wOVQsIGFlcyh4PUYxMTRfbWNwLjA5VCRsb25nLCB5PUYxMTRfbWNwLjA5VCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9MykgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMTRfbWNwLjEwVCwgYWVzKHg9RjExNF9tY3AuMTBUJGxvbmcsIHk9RjExNF9tY3AuMTBUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT0zKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjExNF9tY3AuMTFULCBhZXMoeD1GMTE0X21jcC4xMVQkbG9uZywgeT1GMTE0X21jcC4xMVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTMpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTE0X21jcC4xMlQsIGFlcyh4PUYxMTRfbWNwLjEyVCRsb25nLCB5PUYxMTRfbWNwLjEyVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9MykgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMzdfbWNwLjA5VCwgYWVzKHg9RjEzN19tY3AuMDlUJGxvbmcsIHk9RjEzN19tY3AuMDlUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT00KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjEzN19tY3AuMTBULCBhZXMoeD1GMTM3X21jcC4xMFQkbG9uZywgeT1GMTM3X21jcC4xMFQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTQpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTM3X21jcC4xMVQsIGFlcyh4PUYxMzdfbWNwLjExVCRsb25nLCB5PUYxMzdfbWNwLjExVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9NCkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxNDdfbWNwLjA5VCwgYWVzKHg9RjE0N19tY3AuMDlUJGxvbmcsIHk9RjE0N19tY3AuMDlUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9InJlZCIsbGluZXR5cGU9MSkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxNDdfbWNwLjEwVCwgYWVzKHg9RjE0N19tY3AuMTBUJGxvbmcsIHk9RjE0N19tY3AuMTBUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9InJlZCIsbGluZXR5cGU9MSkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxNDdfbWNwLjExVCwgYWVzKHg9RjE0N19tY3AuMTFUJGxvbmcsIHk9RjE0N19tY3AuMTFUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9InJlZCIsbGluZXR5cGU9MSkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxNDdfbWNwLjEyVCwgYWVzKHg9RjE0N19tY3AuMTJUJGxvbmcsIHk9RjE0N19tY3AuMTJUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9InJlZCIsbGluZXR5cGU9MSkgKwogIGdlb21fcG9seWdvbihkYXRhPUYzNl9tY3AuMDhULCBhZXMoeD1GMzZfbWNwLjA4VCRsb25nLCB5PUYzNl9tY3AuMDhUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT02KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjM2X21jcC4wOVQsIGFlcyh4PUYzNl9tY3AuMDlUJGxvbmcsIHk9RjM2X21jcC4wOVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTYpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMzZfbWNwLjEwVCwgYWVzKHg9RjM2X21jcC4xMFQkbG9uZywgeT1GMzZfbWNwLjEwVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9NikgKwogIGdlb21fcG9seWdvbihkYXRhPUYzNl9tY3AuMTFULCBhZXMoeD1GMzZfbWNwLjExVCRsb25nLCB5PUYzNl9tY3AuMTFUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT02KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjM2X21jcC4xMlQsIGFlcyh4PUYzNl9tY3AuMTJUJGxvbmcsIHk9RjM2X21jcC4xMlQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTYpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GNjZfbWNwLjA4VCwgYWVzKHg9RjY2X21jcC4wOFQkbG9uZywgeT1GNjZfbWNwLjA4VCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9MSkgKwogIGdlb21fcG9seWdvbihkYXRhPUY2Nl9tY3AuMDlULCBhZXMoeD1GNjZfbWNwLjA5VCRsb25nLCB5PUY2Nl9tY3AuMDlUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT0xKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjY2X21jcC4xMFQsIGFlcyh4PUY2Nl9tY3AuMTBUJGxvbmcsIHk9RjY2X21jcC4xMFQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTEpICsKICBnZW9tX3BvbHlnb24oZGF0YT1NMTE5X21jcC4wOFQsIGFlcyh4PU0xMTlfbWNwLjA4VCRsb25nLCB5PU0xMTlfbWNwLjA4VCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibHVlIixsaW5ldHlwZT0yKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9TTExOV9tY3AuMDlULCBhZXMoeD1NMTE5X21jcC4wOVQkbG9uZywgeT1NMTE5X21jcC4wOVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmx1ZSIsbGluZXR5cGU9MikgKwogIGdlb21fcG9seWdvbihkYXRhPU0xMTlfbWNwLjEwVCwgYWVzKHg9TTExOV9tY3AuMTBUJGxvbmcsIHk9TTExOV9tY3AuMTBUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsdWUiLGxpbmV0eXBlPTIpICsKICBnZW9tX3BvbHlnb24oZGF0YT1NMTEyX21jcC4wN1QsIGFlcyh4PU0xMTJfbWNwLjA3VCRsb25nLCB5PU0xMTJfbWNwLjA3VCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibHVlIixsaW5ldHlwZT0zKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9TTExMl9tY3AuMDlULCBhZXMoeD1NMTEyX21jcC4wOVQkbG9uZywgeT1NMTEyX21jcC4wOVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmx1ZSIsbGluZXR5cGU9MykgKwogIGdlb21fcG9seWdvbihkYXRhPU0xMTJfbWNwLjEwVCwgYWVzKHg9TTExMl9tY3AuMTBUJGxvbmcsIHk9TTExMl9tY3AuMTBUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsdWUiLGxpbmV0eXBlPTMpICsKICAjIGdlb21fcG9seWdvbihkYXRhPU02OV9tY3AuMDlULCBhZXMoeD1NNjlfbWNwLjA5VCRsb25nLCB5PU02OV9tY3AuMDlUJGxhdCksCiAgIyAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siKSArCiAgIyBnZW9tX3BvbHlnb24oZGF0YT1NNjlfbWNwLjEwVCwgYWVzKHg9TTY5X21jcC4xMFQkbG9uZywgeT1NNjlfbWNwLjEwVCRsYXQpLAogICMgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIikgKwogICMgZ2VvbV9wb2x5Z29uKGRhdGE9TTIxNV9tY3AuMTFULCBhZXMoeD1NMjE1X21jcC4xMVQkbG9uZywgeT1NMjE1X21jcC4xMVQkbGF0KSwKICAjICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIpICsKICAjIGdlb21fcG9seWdvbihkYXRhPU0yMTVfbWNwLjEyVCwgYWVzKHg9TTIxNV9tY3AuMTJUJGxvbmcsIHk9TTIxNV9tY3AuMTJUJGxhdCksCiAgIyAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siKSArCiAgdGhlbWVfYncoKSArbGFicyh4PSJFYXN0aW5nIChtKSIsIHk9Ik5vcnRoaW5nIChtKSIsdGl0bGU9IlllYXJseSBIb21lIFJhbmdlIFNoaWZ0cyIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiLCBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIGhqdXN0ID0gMC41KSkKCm1jcC5zaGlmdC5URVNUNApgYGAKCgpgYGB7ciBGaWcuIDYuIFNlYXNvbmFsIEhSIFNoaWZ0cywgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CiMjIENyZWF0ZSBNQ1AgcG9seWdvbnMgYnkgU0VBU09OOgpNMjE1X21jcC5FTTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTIxNS9FbWVyZ2VuY2UgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTIxNV9tY3AuRFJZPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMjE1L0RyeSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpNMjE1X21jcC5NT048LW1jcF9hbmFseXNpcy5QT0xZKCIuL00yMTUvTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQoKTTExMl9tY3AuRFJZPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMTEyL0RyeSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpNMTEyX21jcC5NT048LW1jcF9hbmFseXNpcy5QT0xZKCIuL00xMTIvTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpNMTEyX21jcC5QTTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTExMi9Qb3N0X01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKCk0xMTlfbWNwLkRSWTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTExOS9EcnkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTExOV9tY3AuTU9OPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMTE5L01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTExOV9tY3AuUE08LW1jcF9hbmFseXNpcy5QT0xZKCIuL00xMTkvUG9zdF9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCgpGMTE0X21jcC5FTTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjExNC9FbWVyZ2VuY2UgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjExNF9tY3AuRFJZPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTE0L0RyeSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTE0X21jcC5NT048LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMTQvTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTE0X21jcC5QTTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjExNC9Qb3N0X01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKCkYxMzdfbWNwLkVNPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTM3L0VtZXJnZW5jZSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTM3X21jcC5EUlk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMzcvRHJ5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxMzdfbWNwLk1PTjwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjEzNy9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxMzdfbWNwLlBNPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTM3L1Bvc3RfTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQoKRjE0N19tY3AuRU08LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxNDcvRW1lcmdlbmNlIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxNDdfbWNwLkRSWTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjE0Ny9EcnkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjE0N19tY3AuTU9OPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTQ3L01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjE0N19tY3AuUE08LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxNDcvUG9zdF9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCgpGMjUyX21jcC5FTTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjI1Mi9FbWVyZ2VuY2UgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjI1Ml9tY3AuRFJZPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMjUyL0RyeSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMjUyX21jcC5NT048LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YyNTIvTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMjUyX21jcC5QTTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjI1Mi9Qb3N0X01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKCkYzNl9tY3AuRU08LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YzNi9FbWVyZ2VuY2UgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjM2X21jcC5EUlk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YzNi9EcnkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjM2X21jcC5NT048LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YzNi9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYzNl9tY3AuUE08LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YzNi9Qb3N0X01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKCkY2Nl9tY3AuRU08LW1jcF9hbmFseXNpcy5QT0xZKCIuL0Y2Ni9FbWVyZ2VuY2UgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjY2X21jcC5EUlk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0Y2Ni9EcnkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjY2X21jcC5NT048LW1jcF9hbmFseXNpcy5QT0xZKCIuL0Y2Ni9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkY2Nl9tY3AuUE08LW1jcF9hbmFseXNpcy5QT0xZKCIuL0Y2Ni9Qb3N0X01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKCiMjIEZvcnRpZnkgbWNwIHBvbHlnb25zIGZvciBnZ3Bsb3QyICpTRUFTT04qOgpNMjE1X21jcC5FTVQgPC0gZm9ydGlmeShNMjE1X21jcC5FTSwgcmVnaW9uID0gImlkIikKTTIxNV9tY3AuRFJZVCA8LSBmb3J0aWZ5KE0yMTVfbWNwLkRSWSwgcmVnaW9uID0gImlkIikKTTIxNV9tY3AuTU9OVCA8LSBmb3J0aWZ5KE0yMTVfbWNwLk1PTiwgcmVnaW9uID0gImlkIikKCk0xMTJfbWNwLkRSWVQgPC0gZm9ydGlmeShNMTEyX21jcC5EUlksIHJlZ2lvbiA9ICJpZCIpCk0xMTJfbWNwLk1PTlQgPC0gZm9ydGlmeShNMTEyX21jcC5NT04sIHJlZ2lvbiA9ICJpZCIpCk0xMTJfbWNwLlBNVCA8LSBmb3J0aWZ5KE0xMTJfbWNwLlBNLCByZWdpb24gPSAiaWQiKQoKTTExOV9tY3AuRFJZVCA8LSBmb3J0aWZ5KE0xMTlfbWNwLkRSWSwgcmVnaW9uID0gImlkIikKTTExOV9tY3AuTU9OVCA8LSBmb3J0aWZ5KE0xMTlfbWNwLk1PTiwgcmVnaW9uID0gImlkIikKTTExOV9tY3AuUE1UIDwtIGZvcnRpZnkoTTExOV9tY3AuUE0sIHJlZ2lvbiA9ICJpZCIpCgpGMTE0X21jcC5FTVQgPC0gZm9ydGlmeShGMTE0X21jcC5FTSwgcmVnaW9uID0gImlkIikKRjExNF9tY3AuRFJZVCA8LSBmb3J0aWZ5KEYxMTRfbWNwLkRSWSwgcmVnaW9uID0gImlkIikKRjExNF9tY3AuTU9OVCA8LSBmb3J0aWZ5KEYxMTRfbWNwLk1PTiwgcmVnaW9uID0gImlkIikKRjExNF9tY3AuUE1UIDwtIGZvcnRpZnkoRjExNF9tY3AuUE0sIHJlZ2lvbiA9ICJpZCIpCgpGMTM3X21jcC5FTVQgPC0gZm9ydGlmeShGMTM3X21jcC5FTSwgcmVnaW9uID0gImlkIikKRjEzN19tY3AuRFJZVCA8LSBmb3J0aWZ5KEYxMzdfbWNwLkRSWSwgcmVnaW9uID0gImlkIikKRjEzN19tY3AuTU9OVCA8LSBmb3J0aWZ5KEYxMzdfbWNwLk1PTiwgcmVnaW9uID0gImlkIikKRjEzN19tY3AuUE1UIDwtIGZvcnRpZnkoRjEzN19tY3AuUE0sIHJlZ2lvbiA9ICJpZCIpCgpGMTQ3X21jcC5FTVQgPC0gZm9ydGlmeShGMTQ3X21jcC5FTSwgcmVnaW9uID0gImlkIikKRjE0N19tY3AuRFJZVCA8LSBmb3J0aWZ5KEYxNDdfbWNwLkRSWSwgcmVnaW9uID0gImlkIikKRjE0N19tY3AuTU9OVCA8LSBmb3J0aWZ5KEYxNDdfbWNwLk1PTiwgcmVnaW9uID0gImlkIikKRjE0N19tY3AuUE1UIDwtIGZvcnRpZnkoRjE0N19tY3AuUE0sIHJlZ2lvbiA9ICJpZCIpCgpGMjUyX21jcC5FTVQgPC0gZm9ydGlmeShGMjUyX21jcC5FTSwgcmVnaW9uID0gImlkIikKRjI1Ml9tY3AuRFJZVCA8LSBmb3J0aWZ5KEYyNTJfbWNwLkRSWSwgcmVnaW9uID0gImlkIikKRjI1Ml9tY3AuTU9OVCA8LSBmb3J0aWZ5KEYyNTJfbWNwLk1PTiwgcmVnaW9uID0gImlkIikKRjI1Ml9tY3AuUE1UIDwtIGZvcnRpZnkoRjI1Ml9tY3AuUE0sIHJlZ2lvbiA9ICJpZCIpCgpGMzZfbWNwLkVNVCA8LSBmb3J0aWZ5KEYzNl9tY3AuRU0sIHJlZ2lvbiA9ICJpZCIpCkYzNl9tY3AuRFJZVCA8LSBmb3J0aWZ5KEYzNl9tY3AuRFJZLCByZWdpb24gPSAiaWQiKQpGMzZfbWNwLk1PTlQgPC0gZm9ydGlmeShGMzZfbWNwLk1PTiwgcmVnaW9uID0gImlkIikKRjM2X21jcC5QTVQgPC0gZm9ydGlmeShGMzZfbWNwLlBNLCByZWdpb24gPSAiaWQiKQoKRjY2X21jcC5FTVQgPC0gZm9ydGlmeShGNjZfbWNwLkVNLCByZWdpb24gPSAiaWQiKQpGNjZfbWNwLkRSWVQgPC0gZm9ydGlmeShGNjZfbWNwLkRSWSwgcmVnaW9uID0gImlkIikKRjY2X21jcC5NT05UIDwtIGZvcnRpZnkoRjY2X21jcC5NT04sIHJlZ2lvbiA9ICJpZCIpCkY2Nl9tY3AuUE1UIDwtIGZvcnRpZnkoRjY2X21jcC5QTSwgcmVnaW9uID0gImlkIikKCm1jcC5zaGlmdC5URVNUNSA8LSBnZ3Bsb3QoKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjExNF9tY3AuRU1ULCBhZXMoeD1GMTE0X21jcC5FTVQkbG9uZywgeT1GMTE0X21jcC5FTVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmx1ZSIsbGluZXR5cGU9MikgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMTRfbWNwLkRSWVQsIGFlcyh4PUYxMTRfbWNwLkRSWVQkbG9uZywgeT1GMTE0X21jcC5EUllUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9InJlZCIsbGluZXR5cGU9MykgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMTRfbWNwLk1PTlQsIGFlcyh4PUYxMTRfbWNwLk1PTlQkbG9uZywgeT1GMTE0X21jcC5NT05UJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImdyZWVuIixsaW5ldHlwZT00KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjExNF9tY3AuUE1ULCBhZXMoeD1GMTE0X21jcC5QTVQkbG9uZywgeT1GMTE0X21jcC5QTVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTUpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTM3X21jcC5FTVQsIGFlcyh4PUYxMzdfbWNwLkVNVCRsb25nLCB5PUYxMzdfbWNwLkVNVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibHVlIixsaW5ldHlwZT0yKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjEzN19tY3AuRFJZVCwgYWVzKHg9RjEzN19tY3AuRFJZVCRsb25nLCB5PUYxMzdfbWNwLkRSWVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0icmVkIixsaW5ldHlwZT0zKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjEzN19tY3AuTU9OVCwgYWVzKHg9RjEzN19tY3AuTU9OVCRsb25nLCB5PUYxMzdfbWNwLk1PTlQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iZ3JlZW4iLGxpbmV0eXBlPTQpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTM3X21jcC5QTVQsIGFlcyh4PUYxMzdfbWNwLlBNVCRsb25nLCB5PUYxMzdfbWNwLlBNVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9NSkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxNDdfbWNwLkVNVCwgYWVzKHg9RjE0N19tY3AuRU1UJGxvbmcsIHk9RjE0N19tY3AuRU1UJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsdWUiLGxpbmV0eXBlPTIpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTQ3X21jcC5EUllULCBhZXMoeD1GMTQ3X21jcC5EUllUJGxvbmcsIHk9RjE0N19tY3AuRFJZVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJyZWQiLGxpbmV0eXBlPTMpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTQ3X21jcC5NT05ULCBhZXMoeD1GMTQ3X21jcC5NT05UJGxvbmcsIHk9RjE0N19tY3AuTU9OVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJncmVlbiIsbGluZXR5cGU9NCkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxNDdfbWNwLlBNVCwgYWVzKHg9RjE0N19tY3AuUE1UJGxvbmcsIHk9RjE0N19tY3AuUE1UJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT01KSArCiAgIyBnZW9tX3BvbHlnb24oZGF0YT1GMjUyX21jcC5FTVQsIGFlcyh4PUYyNTJfbWNwLkVNVCRsb25nLCB5PUYyNTJfbWNwLkVNVCRsYXQpLAogICMgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT0yKSArCiAgIyBnZW9tX3BvbHlnb24oZGF0YT1GMjUyX21jcC5EUllULCBhZXMoeD1GMjUyX21jcC5EUllUJGxvbmcsIHk9RjI1Ml9tY3AuRFJZVCRsYXQpLAogICMgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT0zKSArCiAgIyBnZW9tX3BvbHlnb24oZGF0YT1GMjUyX21jcC5NT05ULCBhZXMoeD1GMjUyX21jcC5NT05UJGxvbmcsIHk9RjI1Ml9tY3AuTU9OVCRsYXQpLAogICMgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT00KSArCiAgIyBnZW9tX3BvbHlnb24oZGF0YT1GMjUyX21jcC5QTVQsIGFlcyh4PUYyNTJfbWNwLlBNVCRsb25nLCB5PUYyNTJfbWNwLlBNVCRsYXQpLAogICMgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT01KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjM2X21jcC5FTVQsIGFlcyh4PUYzNl9tY3AuRU1UJGxvbmcsIHk9RjM2X21jcC5FTVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmx1ZSIsbGluZXR5cGU9MikgKwogIGdlb21fcG9seWdvbihkYXRhPUYzNl9tY3AuRFJZVCwgYWVzKHg9RjM2X21jcC5EUllUJGxvbmcsIHk9RjM2X21jcC5EUllUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9InJlZCIsbGluZXR5cGU9MykgKwogIGdlb21fcG9seWdvbihkYXRhPUYzNl9tY3AuTU9OVCwgYWVzKHg9RjM2X21jcC5NT05UJGxvbmcsIHk9RjM2X21jcC5NT05UJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImdyZWVuIixsaW5ldHlwZT00KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjM2X21jcC5QTVQsIGFlcyh4PUYzNl9tY3AuUE1UJGxvbmcsIHk9RjM2X21jcC5QTVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTUpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GNjZfbWNwLkVNVCwgYWVzKHg9RjY2X21jcC5FTVQkbG9uZywgeT1GNjZfbWNwLkVNVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibHVlIixsaW5ldHlwZT0yKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjY2X21jcC5EUllULCBhZXMoeD1GNjZfbWNwLkRSWVQkbG9uZywgeT1GNjZfbWNwLkRSWVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0icmVkIixsaW5ldHlwZT0zKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjY2X21jcC5NT05ULCBhZXMoeD1GNjZfbWNwLk1PTlQkbG9uZywgeT1GNjZfbWNwLk1PTlQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iZ3JlZW4iLGxpbmV0eXBlPTQpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GNjZfbWNwLlBNVCwgYWVzKHg9RjY2X21jcC5QTVQkbG9uZywgeT1GNjZfbWNwLlBNVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9NSkgKwogIHRoZW1lX2J3KCkgK2xhYnMoeD0iRWFzdGluZyAobSkiLCB5PSJOb3J0aGluZyAobSkiLHRpdGxlPSJTZWFzb25hbCBIb21lIFJhbmdlIFNoaWZ0cyIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiLCBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIGhqdXN0ID0gMC41KSkKCm1jcC5zaGlmdC5URVNUNQoKYGBgCgoKCjxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj5HaWxhIE1vbnN0ZXIgUHJvcG9ydGlvbiBvZiBSZWZ1Z2UgVXNlLjwvc3Bhbj4KCgpgYGB7ciBNaXhlZCBFZmZlY3RzIFJNQU5PVkEgUmVmdWdlIFVzZSwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9ClJlZnVnaWEgPC0gcmVhZC5jc3YoJy4vUmVmdWdlX1VzZS9SZWZ1Z2lhX0lucHV0LmNzdicpCgpSZWZfSW5kPC1sbWVyKEFWR19QUk9QX1lSX0xJWn5DT1ZFUlRZUEUrU0VBU09OK1NFWCtZRUFSK0NPVkVSVFlQRSpTRUFTT04rKDF8TElaQVJETlVNQkVSKSxkYXRhID0gUmVmdWdpYSkKc3VtbWFyeShSZWZfSW5kKQpgYGAKCmBgYHtyIEFOT1ZBIFRhYmxlIGZvciBNRSBSTUFOT1ZBIFJlZnVnZSBVc2UsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQphbm92YShSZWZfSW5kKQpgYGAKClRoZXJlIHdhcyBubyBlZmZlY3Qgb2YgeWVhciBvbiByZWZ1Z2UgdXNlLiBQZXJmb3JtZWQgTWl4ZWQgRWZmZWN0cyBSTUFOT1ZBIGZvciBlYWNoIHJlZnVnZSB0eXBlLCB0aGVuIGNvbmR1Y3RlZCBwYWlyd2lzZSBjb21wYXJpc29ucyBmb3IgZWFjaCByZWZ1Z2UgdHlwZSBhY3Jvc3Mgc2Vhc29ucy4gRm9yIHBvc3QtaG9jIHBhcml3aXNlIGNvbXBhcmlzb25zLCB1c2VkIEJvbmZlcm9ubmkgYWRqdXN0ZWQgcC12YWx1ZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKClJ1biBSTUFOT1ZBIGZvciBlYWNoIHJlZnVnZSB0eXBlIGFuZCBwYWlyd2lzZSBjb21wYXJpc29ucyBhY3Jvc3MgZWFjaCBzZWFzb246CgpSb2NrcwpgYGB7ciBSTUFOT1ZBIGZvciBSZWZ1Z2UgVHlwZTogUm9ja3MsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQojIFJlZi5FbWVyZ2VuY2UgPC0gc2xpY2UoKQpSb2NrcyA8LSBzdWJzZXQoUmVmdWdpYSwgQ09WRVJUWVBFID09ICJSb2NrcyIpCiMgVmlldyhSb2NrcykKClJvY2tzX21vZDwtbG1lcihTRUFTX1BST1BfTElaflNFQVNPTitTRVgrU0VBU09OKlNFWCsoMXxMSVpBUkROVU1CRVIpLGRhdGEgPSBSb2NrcykKc3VtbWFyeShSb2Nrc19tb2QpCmFub3ZhKFJvY2tzX21vZCkKYGBgCgpgYGB7ciBTZWFzb25hbCBQYWlyd2lzZSBDb21wLjogUm9ja3MsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQphdHRhY2goUm9ja3MpCgpwYWlyd2lzZS50LnRlc3QoQVZHX1BST1BfWVJfTElaLFNFQVNPTiwgcC5hZGogPSAiYm9uZmVycm9uaSIpCmBgYAoKCgpCdXJyb3cKYGBge3IgUk1BTk9WQSBmb3IgUmVmdWdlIFR5cGU6IEJ1cnJvdywgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CkJ1cnJvdyA8LSBzdWJzZXQoUmVmdWdpYSwgQ09WRVJUWVBFID09ICJCdXJyb3ciKQojIFZpZXcoQnVycm93KQoKQnVycm93Lm1vZDwtbG1lcihTRUFTX1BST1BfTElaflNFQVNPTitTRVgrU0VBU09OKlNFWCsoMXxMSVpBUkROVU1CRVIpLGRhdGEgPSBCdXJyb3cpCnN1bW1hcnkoQnVycm93Lm1vZCkKYW5vdmEoQnVycm93Lm1vZCkKYGBgCgpgYGB7ciBTZWFzb25hbCBQYWlyd2lzZSBDb21wLjogQnVycm93LCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KYXR0YWNoKEJ1cnJvdykKCnBhaXJ3aXNlLnQudGVzdChBVkdfUFJPUF9ZUl9MSVosU0VBU09OLCBwLmFkaiA9ICJib25mZXJyb25pIikKYGBgCgoKCk1pZGRlbgpgYGB7ciBSTUFOT1ZBIGZvciBSZWZ1Z2UgVHlwZTogTWlkZGVuLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KTWlkZGVuIDwtIHN1YnNldChSZWZ1Z2lhLCBDT1ZFUlRZUEUgPT0gIk1pZGRlbiIpCiMgVmlldyhNaWRkZW4pCgpNaWRkZW4ubW9kPC1sbWVyKFNFQVNfUFJPUF9MSVp+U0VBU09OK1NFWCtTRUFTT04qU0VYKygxfExJWkFSRE5VTUJFUiksZGF0YSA9IE1pZGRlbikKc3VtbWFyeShNaWRkZW4ubW9kKQphbm92YShNaWRkZW4ubW9kKQpgYGAKCmBgYHtyIFNlYXNvbmFsIFBhaXJ3aXNlIENvbXAuOiBNaWRkZW4sIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQphdHRhY2goTWlkZGVuKQoKcGFpcndpc2UudC50ZXN0KEFWR19QUk9QX1lSX0xJWixTRUFTT04sIHAuYWRqID0gImJvbmZlcnJvbmkiKQpgYGAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCkFuYWx5c2VzIHN1Z2dlc3RzIHRoYXQgdGhlcmUgaXMgYW4gZWZmZWN0IG9mIHNlYXNvbiBhY3Jvc3MgYWxsIHRocmVlIHJlZnVnZSB0eXBlcywgYnV0IHRoZXJlIGlzIG5vIGludGVyYWN0aW9uIG9mIHNleCBhbmQgc2Vhc29uIG9uIGNob3NlbiByZWZ1Z2UgdHlwZXMgKFRhYmxlcyA1LTcpLiBBZnRlciBwZXJmb3JtaW5nIHBvc3QtaG9jIHBhaXJ3aXNlIGNvbXBhcmlzb25zLCB0aGUgcHJvcG9ydGlvbiBvZiByZWZ1Z2UgdXNlIGZvciByb2NrcyB3YXMgaGlnaGVyIGluIGVtZXJnZW5jZSAoMC4zNykuIFRoaXMgbWF5IGJlIGR1ZSB0byBHaWxhIE1vbnN0ZXJzIHByZWZlcmluZyBtb3JlIHJvY2t5IHJlZnVnaWEgZm9yIGhpYmVybmFjdWxhIHVzZS4gSG93ZXZlciwgbGl6YXJkcyB1c2VkIHJvY2t5IHJlZnVnaWEgaW4gc21hbGxlciBwcm9wb3J0aW9ucyB0aHJvdWdodCB0aGUgZHJ5LCBtb25zb29uIGFuZCBwb3N0LW1vbnNvb24gc2Vhc29ucyhUYWJsZSA1KS4gRHVyaW5nIHRoZSBkcnkgc2Vhc29uIEdpbGEgTW9uc3RlcnMgZXhoaWJpdGVkIGEgaGlnaGVyIHByb3BvcnRpb24gb2YgcmVmdWdlIHVzZSBpbiBidXJyb3dzICgwLjI2KSwgYnV0IG1haW50ZWQgYWJvdXQgdGhlIHNhbWUgb2YgYnVycm93IHVzZSB0aHJvdWcgdGhlIG1vbnNvb24gc2Vhc29uIChUYWJsZSA2LikuIEdpbGEgTW9uc3RlcnMgY2hvc2UgbWlkZGVuIHJlZnVnZSB0eXBlcyBpbiBkcnkgYW5kIG1vbnNvb24gc2Vhc29ucyAoMC4yMSBhbmQgMC4yMyByZXNwZWN0aXZlbHkpLCB3aXRoIHRoZSBtYWpvcml0eSBtaWRkZW4gc2VsZWN0aW9uIGluIHRoZSBtb25zb29uLiBIb3dldmVyLCBib3RoIHRoZSBidXJyb3cgYW5kIG1pZGRlbiByZWZ1Z2UgdHlwZXMgd2VyZSBib3RoIHVzZWQgdGhyb3VnaHRvdXQgdGhlIGRyeSBhbmQgbW9uc29vbiBzZWFzb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKVGFibGUgNS4gTWVhbiBwcm9wb3J0aW5hbCB1c2Ugb2YgcmVmdWdlIHR5cGVzIGFjcm9zcyBlYXNjaCBzZWFzb24gYnkgc2V4LgpgYGB7ciBUYWJsZSA1LiBQcm9wb3J0aW5hbCBSZWZ1Z2UgVXNlLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KUmVmdWdlLlByb3A8LXJlYWQuY3N2KCIuL1JlZnVnZV9Vc2UvUmVmdWdlIFByb3AgVGFibGUuY3N2IikKCmthYmxlKFJlZnVnZS5Qcm9wLCBmb3JtYXQgPSAicGFuZG9jIiwgbG9uZ3RhYmxlPVRSVUUsIGNhcHRpb24gPSAnUmVmdWdlIFVzZSBQcm9wb3J0aW9uYWwgTWVhbnMgYnkgU2V4IGFuZCBTZWFzb24nKQpgYGAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhYmxlIDYuIFBvc3QtSG9jIHBhaXJ3aXNlIGNvbXBhcmlzb25zIG9mIHJlZnVnZSB0eXBlcyBiZXR3ZWVuIHNlYXNvbnMuCmBgYHtyIFRhYmxlIDYuIFBvc3QgSG9jIFJlZnVnZSBDb21wcyBieSBTZWFzb24sIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpSZWZ1Z2UuU2lnPC1yZWFkLmNzdigiLi9SZWZ1Z2VfVXNlL1JlZnVnZSBTaWcgVGFibGUuY3N2IikKCmthYmxlKFJlZnVnZS5TaWcsIGZvcm1hdCA9ICJwYW5kb2MiLCBsb25ndGFibGU9VFJVRSxjYXB0aW9uID0gJ1Bvc3QgSG9jIFBhaXJ3aXNlIENvbXBhcmlzb25zIG9mIFJlZnVnZSBUeXBlcycpCmBgYAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFibGUgNy4gQU5PVkEgdGFibGUgYWZ0ZXIgY29uZHVjdGluZyBNaXhlZCBFZmZlY3RzIFJNQU5PVkEgZm9yIGVhY2ggcmVmdWdlIHR5cGUgYWNyb3NzIHNlYXNvbnMuCmBgYHtyIFJNIEFOT1ZBIHRhYmxlIGZvciBSZWZ1Z2UgVXNlLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KUk0udGFibGU8LXJlYWQuY3N2KCIuL1JlZnVnZV9Vc2UvUk0gQU5PVkEgdGFibGUgUmVmdWdlLmNzdiIpCgprYWJsZShSTS50YWJsZSwgZm9ybWF0ID0gInBhbmRvYyIsIGxvbmd0YWJsZT1UUlVFLGNhcHRpb24gPSAnQU5PVkEgVGFibGUgb2YgUk0gQW5hbHlzaXMgZm9yIFJlZnVnZSBVc2UnKQpgYGAKCg==